JTable-筛选数据

时间:2018-08-09 11:09:49

标签: java swing jtable tablesorter

我正在尝试过滤JTable,但结果不符合预期。

下面是带有添加元素的JTable(我正在使用MySQL存储数据)

JTable with contents - Picture

当我尝试为特定人员过滤列表时,我没有从表中获取数据。例如,我搜索“ Ana”,却什么也没有出现。

Search results for "Ana" - Picture

如果我尝试使用某些“数字”(例如薪水)进行搜索,则会得到正确的结果,但ID却不正确。图片说明以下问题。

Wrong ID
Right ID

与员工一起生成ArrayList的代码:

simulator

用于过滤JTable的代码

public static ArrayList<Angajat> listaAngajati() {
        ArrayList<Angajat> listaAngajati = new ArrayList<>();
        try (java.sql.Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/angajati", "root", "***");) {

            Statement st = conn.createStatement();
            st.executeQuery("select * from angajati");
            ResultSet rs = st.getResultSet();
            Angajat angajat;
            while (rs.next()) {
                angajat = new Angajat(rs.getInt("id"), rs.getString("nume"), rs.getString("prenume"), rs.getInt("varsta"), rs.getString("adresa"), rs.getDouble("salariu"));
                listaAngajati.add(angajat);
            }

        } catch (SQLException ex) {
            System.out.println("Error in database connection: \n" + ex.getMessage());
        }
        return listaAngajati;
    }

    public static void arataAngajati() {
        ArrayList<Angajat> arataAngajati = listaAngajati();
        DefaultTableModel model = (DefaultTableModel) tabelangajati.getModel();
        Object[] rand = new Object[6];
        for (int i = 0; i < arataAngajati.size(); i++) {
            rand[0] = arataAngajati.get(i).getID();
            rand[1] = arataAngajati.get(i).getNume();
            rand[2] = arataAngajati.get(i).getPrenume();
            rand[3] = arataAngajati.get(i).getVarsta();
            rand[4] = arataAngajati.get(i).getAdresa();
            rand[5] = arataAngajati.get(i).getSalariu();
            model.addRow(rand);

        }

    }

问题:如何修改代码,以便在我尝试使用其姓名搜索一名雇员时获得正确的结果(与现在不同-没有结果 ),并在尝试修改员工数据时,如JTable所示获得正确的ID(如上图所示)?

编辑

为了从表中过滤数据,我不得不使用

private void cautaInTabelKeyReleased(java.awt.event.KeyEvent evt) {                                         
        DefaultTableModel tabel = (DefaultTableModel) tabelangajati.getModel();
        String query = cautaInTabel.getText().toLowerCase();
        TableRowSorter<DefaultTableModel> sort = new TableRowSorter<DefaultTableModel>(tabel);
        tabelangajati.setRowSorter(sort);

        sort.setRowFilter(RowFilter.regexFilter(query));

    }   

当我过滤表时,仅修改了视图,而不修改了行中的值(即使我看到了第3行的值以及后端的第1行的值)。我设法修改了下面的行,该表运行正常。

发件人:

sort.setRowFilter(RowFilter.regexFilter("(?i)" + query));

收件人:

int row = tabelangajati.getSelectedRow();

0 个答案:

没有答案