Java Swing: Select Jtable过滤数据后的特定行
Java Swing: Select specefic row of Jtable after filtering data
任务是过滤jTable中的数据并传递选择的值。这个问题是jTable过滤数据后,输出过滤前那个位置的旧值。
假设我有一个 table 一列,值为 1,2,3,4,5,6。过滤后我在 jTable 中只有一个值,比方说,6。所以,它应该输出 6,但输出是 1。因为过滤前 table 中有 1。在下面的代码中,第一个函数根据文本字段中提供的文本过滤 table。第二个函数输出选择的值。如何更新 jTable,所以它根据过滤后的数据给我输出,而不是根据原始 table。谢谢。
private void jTextField_searchRecordKeyReleased(java.awt.event.KeyEvent evt) {
DefaultTableModel table=(DefaultTableModel)this.jTable_Search.getModel();
String query=this.jTextField_searchRecord.getText();
TableRowSorter<DefaultTableModel> tr=new TableRowSorter<DefaultTableModel>(table);
jTable_Search.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter("(?i)" + query));
}
private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {
int column = 0;
int rows[]=this.jTable_Search.getSelectedRows();
for(int i=0;i<rows.length;i++)
{
String value = jTable_Search.getModel().getValueAt(rows[i], column).toString();
System.out.println(value);
}
}
table中的选择索引和模型中的选择索引是两个不同的东西。但是您可以将一个转换为另一个。 JTable
API 有一些转换方法。在您的情况下,方法 convertRowIndexToModel
很重要。所以你的代码应该是这样的:
private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {
int column = 0;
int rows[]=this.jTable_Search.getSelectedRows();
for(int i=0;i<rows.length;i++)
{
int modelRow = jTable_Search.convertRowIndexToModel(rows[i]);
String value = jTable_Search.getModel().getValueAt(modelRow, column).toString();
System.out.println(value);
}
}
另一种可能性是使用 table 的方法 getValueAt
。
private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {
int column = 0;
int rows[]=this.jTable_Search.getSelectedRows();
for(int i=0;i<rows.length;i++)
{
String value = jTable_Search.getValueAt(rows[i], column).toString();
System.out.println(value);
}
}
任务是过滤jTable中的数据并传递选择的值。这个问题是jTable过滤数据后,输出过滤前那个位置的旧值。
假设我有一个 table 一列,值为 1,2,3,4,5,6。过滤后我在 jTable 中只有一个值,比方说,6。所以,它应该输出 6,但输出是 1。因为过滤前 table 中有 1。在下面的代码中,第一个函数根据文本字段中提供的文本过滤 table。第二个函数输出选择的值。如何更新 jTable,所以它根据过滤后的数据给我输出,而不是根据原始 table。谢谢。
private void jTextField_searchRecordKeyReleased(java.awt.event.KeyEvent evt) {
DefaultTableModel table=(DefaultTableModel)this.jTable_Search.getModel();
String query=this.jTextField_searchRecord.getText();
TableRowSorter<DefaultTableModel> tr=new TableRowSorter<DefaultTableModel>(table);
jTable_Search.setRowSorter(tr);
tr.setRowFilter(RowFilter.regexFilter("(?i)" + query));
}
private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {
int column = 0;
int rows[]=this.jTable_Search.getSelectedRows();
for(int i=0;i<rows.length;i++)
{
String value = jTable_Search.getModel().getValueAt(rows[i], column).toString();
System.out.println(value);
}
}
table中的选择索引和模型中的选择索引是两个不同的东西。但是您可以将一个转换为另一个。 JTable
API 有一些转换方法。在您的情况下,方法 convertRowIndexToModel
很重要。所以你的代码应该是这样的:
private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {
int column = 0;
int rows[]=this.jTable_Search.getSelectedRows();
for(int i=0;i<rows.length;i++)
{
int modelRow = jTable_Search.convertRowIndexToModel(rows[i]);
String value = jTable_Search.getModel().getValueAt(modelRow, column).toString();
System.out.println(value);
}
}
另一种可能性是使用 table 的方法 getValueAt
。
private void jButton_LocateMouseClicked(java.awt.event.MouseEvent evt) {
int column = 0;
int rows[]=this.jTable_Search.getSelectedRows();
for(int i=0;i<rows.length;i++)
{
String value = jTable_Search.getValueAt(rows[i], column).toString();
System.out.println(value);
}
}