2

概要:

デスクトップアプリケーションでは、1つのJtableをロードし、編集モードでタブを押すと、セルのフォーカスを次のセルに移す必要があります。

問題: セルの値を編集しているときにTabキーを押すと、フォーカスが失われます。ネットで検索したところ、タブを押すたびにJtableがリロードされるために発生することがわかりました。

考えられる解決 策私が考えていた解決策の1つは、作業中のセルのインデックスを取得し、それをグローバル変数で同じにしてから、Tabキーを押すと、次のセルのインデックスを取得して、そのセルにフォーカスを設定できます。どういうわけかそれはうまくいきませんでした。

提案してください。

前もって感謝します..

4

2 に答える 2

5

私の頭のてっぺんから、私たちはタブ&のカスタムkeystroke実装でこれを克服したと思います。InputMapActionMap

私たちが使用する実装では、「継続的な」編集を実行できます。つまり、ユーザーがEnterキーまたはTabキーを押すと、次の編集可能なセルに移動して編集を開始します。

InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
ActionMap am = table.getActionMap();

KeyStroke tabKey = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);

Action moveNextCellAction = am.get(im.get(tabKey));

ContinousEditAction continousEditAction = new ContinousEditAction(table, moveNextCellAction);

im.put(tabKey, "Action.tab");

am.put("Action.tab", continousEditAction);

ContinousEditAction、次の編集可能なセルを見つける責任があります。JTable.getEditingRow基本的に、アクションが実行されると、 &メソッドを介して現在のセルを取得しJTable.getEditingColumnます(テーブルがを介して編集モードであることも確認する必要があります。そうでない場合は、 &JTable.isEditingを使用する必要があります。実際、これを実行するだけでうまくいく可能性がありますが、これが私が問題に取り組んだ方法です)。JTable.getSelectedRowJTable.getSelectedColumn

そこから、編集可能なセルが見つかるまでセルをウォークします。

基本的に、現在の行の最後までチェックしてから、行がなくなるまで次の行に移動します。実行する内容に応じて、テーブルの先頭(セル0x0)にループバックすることを選択できます。現在の位置に到達するまで歩きます。

注意してください。注意しないと、連続ループになる可能性があります:P。

JTable.setRowSelectionInterval編集可能なセルが見つからない場合は、 &を使用して次に使用可能なセルを選択することをお勧めしJTable.setRowSelectionIntervalます。それ以外の場合は、JTable.editCellAt(nextRow, nextCol)

しかし、これはすべて、あなたが達成したいことです。

また、同じアイデアをエンターキーに適用することもできます;)

于 2012-07-26T10:22:32.553 に答える
3

通常、タブはフォーカスを取得するとjTableで機能します。Tabキーを押して次のセルを編集する場合は、jTableのキーリリースイベントで次のコードを指定します。

 if (evt.getKeyCode() == 9) {
            jTable1.editCellAt(nextRowIndex, nextColumnIndex);
    }
于 2012-07-27T06:04:52.523 に答える