java JTable id在动态搜索后重置
我的应用程序中有一个来自MySQL数据库的jtable,如图所示;
当我选择一行时,我会在左下角显示它的id号,如上图所示。然后我会把身份证送到某个我需要的地方。但我也有一个动态搜索我的表,我做了一个搜索,如图所示
我过滤搜索那些以“Go”字母开头的电影,它显示了两部电影,它们的资历是正确的,但当我选择一部时,它没有给出正确的id。正如图中所示,我选择了《欢乐时光》电影,它的id是7,但左下角是1,如果我选择Gora电影,它的id是8,但左下角是2。但我希望左下角显示电影的id
在我的代码中,我认为这些方法将有助于理解我的错误(DefaultTableModel;在类的开头初始化)
我的Jdialog的构造函数
public JDialogClass(java.awt.Frame parent, boolean modal, int id) {
super(parent, modal);
initComponents();
this.kullaniciID = id;
model = (DefaultTableModel) myTable.getModel();
showTable();
}
可展示方法
public void showTable(){
model.setRowCount(0);
ArrayList<Programlar> programlar = new ArrayList<Programlar>();
programlar = islemler.programGetir();
if(programlar != null){
for(Programlar program:programlar){
Object[] tabloicerigi = {program.getId(),program.getAd(),program.getTur(),program.getTip(),program.getBolumsayisi(),
program.getUzunluk(),program.getPuan()};
model.addRow(tabloicerigi);
}
}
}
动态搜索法
public void dynamicSearch(String arama){
TableRowSorter<DefaultTableModel> tr = new TableRowSorter<DefaultTableModel>(model);
myTable.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter("(?i)" + arama, 1)); // 1 number here means search in 2nd column of table
}
动态搜索的密钥释放方法
private void searchKeyReleased(java.awt.event.KeyEvent evt) {
String arama = search.getText();
dynamicSearch(arama);
}
选择行法
private void myTableMouseClicked(java.awt.event.MouseEvent evt) {
int selectedRow = myTable.getSelectedRow();
int selectedId = (int) model.getValueAt(selectedRow, 0);
labelWhichShowsID.setText(String.valueOf(selectedId));
}
# 1 楼答案
您正在对JTable中的数据进行排序
模型中的数据未排序。JTable只是在排序视图中显示数据
因此,上面的语句是不正确的,因为模型索引可能与表行索引不匹配
您可以直接从表中获取数据:
但是,这可能会导致用户重新组织列(除非您已禁用此功能),并且表视图的列0将不再是id
因此,更安全的解决方案是使用: