如何 select 并显示过滤后的 jtable 中的右行?
how to select and display right row from a filtered jtable?
我的代码是用户在文本字段中输入他想搜索的内容,然后在 jtable 中自动过滤,但我有一个功能,当用户点击一行数据时在行中呈现在不同的 Jframe 中。例如在 jtable 中,我有第 1、2、3、4、5、6 行用户过滤,结果是第 2 行和第 5 行,当我单击“2”行时,它将从未过滤的原始行 1 table
代码的第一部分具有从文本字段
过滤我的 jtable 的功能
private void filter(String query){
DefaultTableModel model = (DefaultTableModel) History_Table.getModel();
TableRowSorter<DefaultTableModel> tr=new TableRowSorter<DefaultTableModel>(model);
History_Table.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter(query.trim()));
}
这是行选择代码,并将数据放入另一个 jframe 的文本区域
private void History_TableMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
int index = this.History_Table.getSelectedRow();
TableModel model = History_Table.getModel();
String name= model.getValueAt(index, 1).toString();
String dov= model.getValueAt(index, 2).toString();
String notes= model.getValueAt(index, 4).toString();
String drugs= model.getValueAt(index, 5).toString();
String diagnosis= model.getValueAt(index, 6).toString();
jtRowData.setVisible(true);
jtRowData.pack();
jtRowData.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jtRowData.nameA.setText(name);
jtRowData.diagnosisA.setText(diagnosis);
jtRowData.DateA.setText(dov);
jtRowData.jTextArea2.setText(notes);
jtRowData.DrugsA.setText(drugs);
}
int index = this.History_Table.getSelectedRow();
TableModel model = History_Table.getModel();
String name= model.getValueAt(index, 1).toString();
String dov= model.getValueAt(index, 2).toString();
String notes= model.getValueAt(index, 4).toString();
String drugs= model.getValueAt(index, 5).toString();
String diagnosis= model.getValueAt(index, 6).toString();
过滤(或排序)table 时,模型中的数据不会更改,只会过滤(或排序)视图中的数据。
因此您需要将视图中当前选定的行映射到模型中的行:
int modelRow = table.convertRowIndexToModel( table.getSelectedRow() );
TableModel model = table.getModel();
String name= model.getValueAt(modelRow, 1).toString();
String dov= model.getValueAt(modelRow, 2).toString();
String notes= model.getValueAt(modelRow, 4).toString();
String drugs= model.getValueAt(modelRow, 5).toString();
String diagnosis= model.getValueAt(modelRow, 6).toString();
我的代码是用户在文本字段中输入他想搜索的内容,然后在 jtable 中自动过滤,但我有一个功能,当用户点击一行数据时在行中呈现在不同的 Jframe 中。例如在 jtable 中,我有第 1、2、3、4、5、6 行用户过滤,结果是第 2 行和第 5 行,当我单击“2”行时,它将从未过滤的原始行 1 table
代码的第一部分具有从文本字段
过滤我的 jtable 的功能 private void filter(String query){
DefaultTableModel model = (DefaultTableModel) History_Table.getModel();
TableRowSorter<DefaultTableModel> tr=new TableRowSorter<DefaultTableModel>(model);
History_Table.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter(query.trim()));
}
这是行选择代码,并将数据放入另一个 jframe 的文本区域
private void History_TableMouseClicked(java.awt.event.MouseEvent evt) {
// TODO add your handling code here:
int index = this.History_Table.getSelectedRow();
TableModel model = History_Table.getModel();
String name= model.getValueAt(index, 1).toString();
String dov= model.getValueAt(index, 2).toString();
String notes= model.getValueAt(index, 4).toString();
String drugs= model.getValueAt(index, 5).toString();
String diagnosis= model.getValueAt(index, 6).toString();
jtRowData.setVisible(true);
jtRowData.pack();
jtRowData.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jtRowData.nameA.setText(name);
jtRowData.diagnosisA.setText(diagnosis);
jtRowData.DateA.setText(dov);
jtRowData.jTextArea2.setText(notes);
jtRowData.DrugsA.setText(drugs);
}
int index = this.History_Table.getSelectedRow();
TableModel model = History_Table.getModel();
String name= model.getValueAt(index, 1).toString();
String dov= model.getValueAt(index, 2).toString();
String notes= model.getValueAt(index, 4).toString();
String drugs= model.getValueAt(index, 5).toString();
String diagnosis= model.getValueAt(index, 6).toString();
过滤(或排序)table 时,模型中的数据不会更改,只会过滤(或排序)视图中的数据。
因此您需要将视图中当前选定的行映射到模型中的行:
int modelRow = table.convertRowIndexToModel( table.getSelectedRow() );
TableModel model = table.getModel();
String name= model.getValueAt(modelRow, 1).toString();
String dov= model.getValueAt(modelRow, 2).toString();
String notes= model.getValueAt(modelRow, 4).toString();
String drugs= model.getValueAt(modelRow, 5).toString();
String diagnosis= model.getValueAt(modelRow, 6).toString();