【问题标题】:Refresh JTable when typed text is a row in JTable当键入的文本是 JTable 中的一行时刷新 JTable
【发布时间】:2013-10-16 20:39:10
【问题描述】:

我有一个JTable,有 7 列和 2 行。在我的JTable 下面我有一个JTextField。当我在JTextField 中输入内容时,我可以轻松获得我输入的内容:String lookFor = this.jTextField2.getText();

但是现在,我想在我的JTextField 中输入一些内容后刷新我的JTable,但前提是一行(或多行)包含来自JTextField 的文本。我试过了,没有结果:

public Object[][] getTableData(JTable table) {
        DefaultTableModel dtm = (DefaultTableModel) table.getModel();
        int nRow = dtm.getRowCount(), nCol = dtm.getColumnCount();
        Object[][] tableData = new Object[nRow][nCol];
        for (int i = 0; i < nRow; i++) {
            for (int j = 0; j < nCol; j++) {
                tableData[i][j] = dtm.getValueAt(i, j);
            }
        }
        return tableData;
    }

private void jTextField2KeyReleased(java.awt.event.KeyEvent evt) {                                        
        // TODO add your handling code here:

        DefaultTableModel newTableModel = new DefaultTableModel();
        String lookFor = this.jTextField2.getText();

        Object[][] td = getTableData(this.myTable);

        int rows = td.length;
        for (int i = 0; i < rows; i++) {
            String brand = (String) td[0][0];
            String model = (String) td[0][1];
            String serialNumber = (String) td[0][2];
            String date = (String) td[0][3];
            String firstname = (String) td[0][4];
            String lastname = (String) td[0][5];
            String desc = (String) td[0][6];

            if (brand.contains(lookFor) || model.contains(lookFor) || serialNumber.contains(lookFor) || date.contains(lookFor)
                    || firstname.contains(lookFor) || lastname.contains(lookFor) || desc.contains(lookFor));
            newTableModel.addRow(new Object[]{brand, model, serialNumber, date, firstname, lastname, desc});

        }

        this.myTable.setModel(newTableModel);
    } 

【问题讨论】:

    标签: java swing jtable jtextfield


    【解决方案1】:

    听起来你想做表格过滤。

    阅读 Sorting and Filtering 上的 Swing 教程中的部分,了解一个工作示例,该示例将在您在文本字段中输入文本时过滤显示的行。

    【讨论】:

      【解决方案2】:

      我尝试了您的代码,但您忘记为新模型设置列。您必须这样做

      newTableModel.setColumnCount(7)
      

      newTableModel.setColumnIdentifiers(new String[] { ... });
      

      只有当您这样做时,您才能在已显示的表格中看到新数据的样子。

      【讨论】:

        猜你喜欢
        • 2014-08-11
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        • 2015-09-06
        • 2011-12-05
        • 2014-09-06
        • 2011-10-17
        • 1970-01-01
        相关资源
        最近更新 更多