我在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但是当我单击“确定”退出“X”时,当然此对话框消失但显示新的空对话框:
http://i.imgur.com/SzkF5iK.png
我做错了什么,如何解决这个问题?
答案 0 :(得分:3)
必须添加到对话框的是scollPane,它本身包含表格。不是表本身。
您应该决定getShortcutKeysTable()
做什么:
void createAndAddTable()
)混合这两个职责会使代码混乱,即使对于编写代码的人也是如此。
在任何情况下,设置对话框的大小不是它的责任,而且它是不必要的,因为你无论如何都要调用pack()。
答案 1 :(得分:1)
您需要致电JDialog.setVisible(true);
以显示对话框。
但是你的代码中有一个错误:你将表放在一个滚动窗格中并将滚动窗格添加到对话框中(在方法getShortcutKeysTable
中),然后再次将该表添加到对话框中(在构造函数中)。
如果你在构造函数
中运行,你的代码运行正常 ...
getShortcutKeysTable();
this.pack();
this.setVisible(true);
}