我对JTable在JDialog中的使用有问题。我想用下面的代码在对话框中显示我的表:
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的行数据和列,但是当我单击“确定”退出'X‘时,这个对话框当然消失了,但是显示了新的空对话框:
http://i.imgur.com/SzkF5iK.png
我做错了什么,如何解决这个问题?
发布于 2016-01-05 17:35:41
必须添加到对话框中的是scollPane,它本身包含表。不是桌子本身。
您应该决定getShortcutKeysTable()做什么:
void createAndAddTable())。将这两种职责混合在一起会使代码变得混乱,甚至对于编写代码的人来说也是如此。
在任何wase中,设置对话框的大小都不是它的责任,而且它是不必要的,因为您无论如何都要调用pack()。
发布于 2016-01-05 17:37:48
您需要调用JDialog.setVisible(true);来显示对话框。
但是您的代码中有一个错误:将表放在滚动窗格中,并将滚动窗格添加到对话框(在方法getShortcutKeysTable中),然后再次将表添加到对话框中(在构造函数中)。
如果在构造函数中运行,则代码运行良好。
...
getShortcutKeysTable();
this.pack();
this.setVisible(true);
}https://stackoverflow.com/questions/34617692
复制相似问题