我有一个JScrollPane作为使用其默认构造函数初始化的私有字段。此窗格应该动态添加新表,并在选择另一个表中的行时填充它。
该表可以很好地添加行数据并显示但列标识符不会显示。在表上有一个列表选择侦听器设置,其中选择了行,并且也被称为罚款。
scrollForeign是preitalitalized scrollpane,tableMain是选择表。
以下代码:
public void valueChanged(ListSelectionEvent s) {
if (s.getSource().equals(tableMain.getSelectionModel())) {
int caseNo;
DefaultTableModel jobsModel = new DefaultTableModel(0,0);
JTable tableJobs = new JTable();
scrollForeign.add(tableJobs);
jobsModel.setColumnIdentifiers(new String[] {"jid", "name", "price", "description", "quantity"});
tableJobs.setModel(jobsModel);
jobsModel.setRowCount(0);
jobsModel.addRow(new String[] {"1", "test", "10", "test", "1"});
jobsModel.addRow(new String[] {"2", "test", "10", "test", "1"});
jobsModel.addRow(new String[] {"3", "test", "10", "test", "1"});
}
}
提前致谢。
答案 0 :(得分:2)
请勿使用JScrollPane#add
,而是使用JScrollPane#setViewportView
另一方面,不要每次都创建一个新的JTable
,只需创建模型并将其应用于每次JTable
的同一个实例......
public void valueChanged(ListSelectionEvent s) {
if (s.getSource().equals(tableMain.getSelectionModel())) {
int caseNo;
DefaultTableModel jobsModel = new DefaultTableModel(new String[] {"jid", "name", "price", "description", "quantity"},0);
jobsModel.addRow(new String[] {"1", "test", "10", "test", "1"});
jobsModel.addRow(new String[] {"2", "test", "10", "test", "1"});
jobsModel.addRow(new String[] {"3", "test", "10", "test", "1"});
tableJobs.setModel(jobsModel);
}
}
其中tableJobs
是一个实例字段,并且已经应用于JScrollPane
...