1

I have a JTable with 7 columns and 2 rows. Below my JTable I have a JTextField. When I type something in JTextField, I can easly get what I typed: String lookFor = this.jTextField2.getText();

But now, I would like to refresh my JTable after I type something in my JTextField but only when a row (or rows) contain(s) a text from JTextField. I tried this, with no result:

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);
    } 
4

2 に答える 2

3

テーブルフィルタリングをしたいようです。

テキスト フィールドにテキストを入力したときに表示される行をフィルター処理する実際の例については、Swing チュートリアルの並べ替えとフィルター処理に関するセクションを参照してください。

于 2013-10-16T20:51:00.090 に答える
1

あなたのコードを試してみましたが、新しいモデルの列を設定するのを忘れていました。あなたはどちらかをしなければなりません

newTableModel.setColumnCount(7)

また

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

これを行った場合にのみ、既に表示されているテーブルで新しいデータがどのように見えるかがわかります。

于 2013-10-16T20:51:22.043 に答える