2013-04-06 135 views
10

我一直在寻找一种解决方案来增加JTable中行的高度。我一直在使用编译并运行OK的setRowHeight(int int)方法,但没有增加行。当我使用该行的getRowHeight(int)方法设置高度时,它确实打印出了增加行的大小,所以我不确定是什么错误。下面的代码是一个粗略的例子,我试图解决它。在java中设置JTable中行的高度

我的课程扩展了JFrame。

String[] columnNames = {"Column 1", "Column 2", "Column 1 3"}; 

JTable table = new JTable(new DefaultTableModel(columnNames, people.size())); 

DefaultTableModel model = (DefaultTableModel) table.getModel(); 

int count =1; 
for(Person p: people) 
{ 
    model.insertRow(count,(new Object[]{count, p.getName(), p.getAge()+"", 
    p.getNationality})); 
    count++; 
} 

table.setRowHeight(1, 15);//Try set height to 15 (I've tried higher) 

有谁能告诉我我要去哪里吗?我正在尝试增加第1行到15像素的高度?

+2

'我重新安排我的代码作为例子,我甚至提高到高度为100,仍然visable increase'。这就是为什么您应该发布证明问题的[SSCCE](http://sscce.org/)。仅仅因为你说你正在做某件事并不意味着你实际上正在做这件事。也许你错误地定义了两个表,并且你正在改变一个实际上没有显示的表的属性。 – camickr 2013-04-06 19:19:20

+0

对不起,我在循环中使用setRowHeight(int int)方法,但将其更改为setRowHeight(int),现在它完美地工作。感谢您的回复,非常熟悉 – 2013-04-06 19:26:07

回答

13

不知道什么是留在索引0的第一行为空的意图是什么。 JTable中的行从索引0运行。如果您可以发布说明问题的完整示例(即SSCCE),那么最好。比较该工程确定这个简单的例子:

enter image description here

import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class DemoTable { 
    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("DemoTable"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     DefaultTableModel model = new DefaultTableModel(); 
     model.setColumnIdentifiers(new Object[] { 
       "Column 1", "Column 2", "Column 3" }); 

     JTable table = new JTable(model); 
     for (int count = 0; count < 3; count++){ 
      model.insertRow(count, new Object[] { count, "name", "age"}); 
     } 
     table.setRowHeight(1, 30); 

     frame.add(new JScrollPane(table)); 
     frame.setLocationByPlatform(true); 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 
+1

非常感谢您的回复。当我重新安排代码作为你的例子时,它现在起作用。非常感谢 – 2013-04-06 19:22:08

+0

@DouglasGrealis不客气,我很高兴它帮助你! :) – tenorsax 2013-04-06 19:33:26

11

您可以使用:

,或者如果你想设置的行高为特定行,请使用:

table.setRowHeight(int par1, int par2);

+0

感谢您的回复。正如你在我的代码中看到的那样,我已经调用了它,但似乎没有做任何事情。 – 2013-04-06 17:17:51

+0

尝试使用model.setRowHeight()?因为你从表变量 – madcrazydrumma 2013-04-06 17:30:09

+0

调用getModel()方法我试过那里,并编译器输出:找不到符号setRowHeight在位置DefaultTableModel?再次感谢 – 2013-04-06 17:36:09

2

您还可以添加一个tableModelListener?

model.addTableModelListener(new TableModelListener() { 
    @Override public void tableChanged(final TableModelEvent e) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override public void run() { 
       table.setRowHeight(e.getFirstRow(), 15); //replace 15 with your own height 
      } 
     }); 
    } 
}); 
+0

感谢您的回复。我会重写构造函数之外的那些方法吗?随着JTable – 2013-04-06 17:50:11

+0

这就是我做@DouglasGrealis。我的JTable类变成了TableModelListener,我的表模型将它添加为TableModelListener。 – user1283704 2016-04-18 19:08:38