我有一张桌子,上面有一些数据。我想选择几行要监视的行(然后将这些行显示在带有自己的表的新JFrame
中)-我们称之为监视的记录。
我发现这段代码可以完全做到这一点,但是它创建的新表具有与原始表相同的行数。但是,它确实会成功显示新选择的行,但是会从底部向上填充新表。
例如,我的原始表有10行,我选择3,新表总共有10行,但是只有8、9和10填充了所选数据,而第1到7行只有空单元格。
如何使其仅显示所选数据,而不显示空行?
public void exportSelectedRows(ActionEvent actionEvent) {
TableModel tableModel = patientTable.getModel();
int[] index = patientTable.getSelectedRows();
Object[] row = new Object[10]; //problem is here that object has size 10 hence the 10 rows?
monitoredPatients = new MonitoredPatients();
monitoredPatients.monitoredPatientsTable = new JTable(row.length, columnNames.length);
DefaultTableModel defaultTableModel = (DefaultTableModel) monitoredPatients.monitoredPatientsTable.getModel();
for (int value : index) {
row[0] = tableModel.getValueAt(value, 0);
row[1] = tableModel.getValueAt(value, 1);
row[2] = tableModel.getValueAt(value, 2);
row[3] = tableModel.getValueAt(value, 3);
row[4] = tableModel.getValueAt(value, 4);
row[5] = tableModel.getValueAt(value, 5);
defaultTableModel.addRow(row);
}
monitoredPatients.add(new JScrollPane(monitoredPatients.monitoredPatientsTable));
}
我希望新表仅显示没有空行的选定记录。
答案 0 :(得分:0)
row = new Object [10]; //问题在这里,对象的大小为10,因此有10行? .. monitoringPatients.monitoredPatientsTable = new JTable(row.length,columnNames.length);
您有几个问题:
为什么要创建值为10的行Array?行数组代表每一行的数据。您仅复制6列数据,所以数组的大小应仅为6。
因为从空的DefaulotTableModel开始,所以行数的值应为0。然后,您可以使用addRow(...)
方法添加新的数据行。这使TableModel的大小动态变化。
因此代码应为:
monitoredPatients.monitoredPatientsTable = new JTable(0, columnNames.length);
或者更好的是,为什么不使用包含列名的数组创建TableModel?我确定您不希望看到“ A,B,C,D,E,F”,如果您仅指定列数,它将是默认值。阅读DefaultTableModel API,以使用适当的构造函数。