我在JDialog中使用JTable时遇到问题。我想用以下代码在对话框中显示我的表:
public class ShortcutKeys extends JDialog {
public ShortcutKeys( JFrame parent ) {
super( parent );
this.setTitle( "Shortcut Keys of..." );
this.setLocationRelativeTo( null );
this.setModal( true );
this.setResizable( false );
this.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );
this.getContentPane().setLayout( new BorderLayout() );
JTable shortcutKeysTable = getShortcutKeysTable();
this.add( shortcutKeysTable, BorderLayout.CENTER );
this.pack();
}
private JTable getShortcutKeysTable() {
JTable shortcutKeysTable;
Object rowData[][] = { { "1", "11" }, { "2", "22"} };
Object columnNames[] = { "Column One", "Column Two" };
shortcutKeysTable = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(shortcutKeysTable);
this.add(scrollPane, BorderLayout.CENTER);
this.setSize(300, 150);
return shortcutKeysTable;
}
}
因此,问题在于,恰好使用此代码,不会显示列名-仅行数据没有我的大小,结果在小表中而不是我的偏好。
但是在方法或构造函数中,我添加以下行:
this.setVisible( true );
然后,当我单击“确定”时,此表显示的行数据和列的大小为300x150 BUT。退出“ X”,然后此对话框当然消失了,但显示了一个新的空对话框:
http://i.imgur.com/SzkF5iK.png
我做错了什么,该如何解决呢?
最佳答案
scollPane必须添加到对话框中,它本身包含表。不是桌子本身。
您应该确定getShortcutKeysTable()
的作用:
它要么创建一个表,一个scrollPane,然后将scollPane添加到对话框(并且应该重构为void createAndAddTable()
)
或者它只是创建一个表并返回它,调用者负责将其包装到scollpane中并将滚动窗格添加到对话框中。
混合这两种职责会使代码变得混乱,即使对于编写代码的人也是如此。
无论如何,设置对话框的大小不是它的责任,这是不必要的,因为无论如何您都需要调用pack()。