我正在尝试过滤JTable,但结果不符合预期。
下面是带有添加元素的JTable(我正在使用MySQL存储数据)
JTable with contents - Picture
当我尝试为特定人员过滤列表时,我没有从表中获取数据。例如,我搜索“ Ana”,却什么也没有出现。
Search results for "Ana" - Picture
如果我尝试使用某些“数字”(例如薪水)进行搜索,则会得到正确的结果,但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();