1
 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 画面で 2 回目の検索を行うと、キーワードが一致しても検索結果がありません。最後に検索されたインデックスが保持され、リセットされないことが問題であると確信していますが、これをどこでどのように変更するかはわかりません。

4

2 に答える 2

1

5列の10行のテーブルがあるとします。

一致するものがあります:

  • 2、2
  • 4、1
  • 9、0

  • 初めてあなたは2、2を見つけるでしょう。

  • したがって、次に行2と列3から開始するときは、アルゴリズムは列3と4の値のみを検索します(4はテーブルの最後の列です)。

あなたが持っているべきものは:

  • セル2、3からセル2、4までの最初の外観
  • 次に、ループを使用して行3と列0から開始し、列をインクリメントします->行3に一致しません
  • 次に、行を4にインクリメントし、列を0にリセットします。列を1にインクリメントすると、2番目の一致が見つかります。
  • 等...

私はまだテストしていませんが、あなたの内側のループでは、このように増分を開始する必要があると思います

int j = fromCol

に置き換える必要があります

int j = (i == fromRow ? fromCol : 0);
于 2013-02-05T23:50:15.003 に答える
1

fromRowfromColvars を選択した行と列に設定しています。そして、最初の結果が見つかった場所に選択を変更しています。2 回目の検索で現在の選択範囲の左または上にあるものだけが見つかった場合、何も見つかりません。

fromRowそもそもandfromColを 0, 0 に設定してみませんか?

于 2013-02-05T22:22:47.840 に答える