保存选定的JTable行,并在另一个JTable中显示它们(在另一个JFrame中)

时间:2019-05-06 15:40:38

标签: java swing object arraylist jtable

我有一张桌子,上面有一些数据。我想选择几行要监视的行(然后将这些行显示在带有自己的表的新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));
    }

我希望新表仅显示没有空行的选定记录。

1 个答案:

答案 0 :(得分:0)

row = new Object [10]; //问题在这里,对象的大小为10,因此有10行? .. monitoringPatients.monitoredPatientsTable = new JTable(row.length,columnNames.length);

您有几个问题:

  1. 为什么要创建值为10的行Array?行数组代表每一行的数据。您仅复制6列数据,所以数组的大小应仅为6。

  2. 因为从空的DefaulotTableModel开始,所以行数的值应为0。然后,您可以使用addRow(...)方法添加新的数据行。这使TableModel的大小动态变化。

因此代码应为:

monitoredPatients.monitoredPatientsTable = new JTable(0, columnNames.length);

或者更好的是,为什么不使用包含列名的数组创建TableModel?我确定您不希望看到“ A,B,C,D,E,F”,如果您仅指定列数,它将是默认值。阅读DefaultTableModel API,以使用适当的构造函数。