public boolean searchSummaryData(String textToFind) {
int fromRow, fromCol;
fromRow = summaryTable.getSelectedRow();
fromCol = summaryTable.getSelectedColumn();
if (fromRow < 0) {
fromRow = 0; //set to start point, first row
}
if (fromCol < 0) {
fromCol = 0;
} else {
fromCol++;//incremental search - look through each columns, then switch to next row
if (fromCol >= summaryTable.getColumnCount()) {
fromCol = 0;
fromRow++;
}
}
for (int i = fromRow; i < summaryTableModel.getRowCount(); i++) {
for (int j = fromCol; j < summaryTableModel.getColumnCount(); j++) {
final Object valueAt = summaryTableModel.getValueAt(i, j); //point to object at i,j
if (valueAt != null) {
textToFind = textToFind.toLowerCase();
if (valueAt.toString().toLowerCase().contains(textToFind)) {
//Map the index of the column/row in the table model at j/i to the index of the column/row in the view.
int convertRowIndexToView = summaryTable.convertRowIndexToView(i);
int convertColIndexToView = summaryTable.convertColumnIndexToView(j);
summaryTable.setRowSelectionInterval(i, i);
summaryTable.setColumnSelectionInterval(j, j);
//Return a rectangle for the cell that lies at the intersection of row and column.
Rectangle rectToScrollTo = summaryTable.getCellRect(convertRowIndexToView, convertColIndexToView, true);
tableSp.getViewport().scrollRectToVisible(rectToScrollTo);
return true;
}
}
}
}
return false;
}
我上面的搜索方法有问题。我这样做的方式,它只允许我搜索一次特定的匹配关键字。在同一个GUI屏幕中,如果我进行第二次搜索,即使匹配关键字,也找不到结果。我很确定最后搜索的索引是保留的,而不是重置是问题,但我不确定在哪里以及如何更改它。
答案 0 :(得分:1)
您要将fromRow
和fromCol
变量设置为选定的行和列。然后您将选择更改为找到第一个结果的位置。如果第二次搜索只能找到当前选择的左侧或上方,则无法找到任何内容。
为什么不首先将fromRow
和fromCol
设为0,0?
答案 1 :(得分:1)
假设您有一个包含5列的10行表。
有以下匹配项:
9,0
第一次你会发现2,2。
你应该拥有的是:
我还没有测试过,但我认为在你的内循环中,你应该像这样开始增量
int j = fromCol
应替换为
int j = (i == fromRow ? fromCol : 0);