0

JTable を使用して一部のデータを表示し、入力も許可する古い Java アプリケーションがあります。JTable には 2 つの列があります。JTable の横に、新しい行を JTable に追加するボタンがあります。

私の問題は、JTable をナビゲートするときの Tab および Enter キーボード キーとマウス クリックの動作です。

私は説明しようとします: JTable に 5 つの行があるとしましょう:

  1. ある行をマウスでクリックすると、行全体が強調表示される場合があり、セルが編集モードになる場合があります(行全体が強調表示されることに加えて)
  2. 選択した行が強調表示されることがありますが、強調表示された行の上または下のセルが編集モードになります
  3. Tab を使用してあるフィールドから別のフィールドにスキップすると、編集可能なフィールドは常に強調表示された行の上に表示されます。

他にも問題があります。

何が問題なのですか?

4

2 に答える 2

1

それは少し奇妙に聞こえます。テーブルを完全に無効にし、行数が変更されたことをリスナーなどに通知していますか?

テーブル モデルで、すべての TableModelListeners をループし、TableModelEvent 'insert' イベントを発生させます。

TableModelEvent event = new TableModelEvent(
                modelInstance,
                positionOfNewRow,
                positionOfNewRow,
                TableModelEvent.ALL_COLUMNS,
                TableModelEvent.INSERT);

for (TableModelListener l: listeners) {
    l.tableChanged(event);
}

問題を解決できない場合は、テーブルに対して独自の動作を記述することができます。

これらはいくつかの便利な方法です:

editCellAt(int row, int column);
rowAtPoint(Point point);
columnAtPoint(Point point);

独自のリスナーをテーブルに追加して、イベントをインターセプトし、好きな方法でセルを編集できます。

于 2012-04-11T22:03:45.407 に答える
0

表のセル編集をオフにします。そして、それがどのように振る舞うかを見てください。通常、これは TableModel.isCellEditable() メソッドを単純に false を返すように変更することで処理できます。

オンに戻します。JTable のインスタンスはサブクラス化されていますか? editCell() をオーバーライドしていますか? その場合、イベントが発生したかどうかに基づいて編集をトリガーするメソッドです。その方法は不適切に編集をオンにしています。オーバーライドされている場合、そのメソッドの実装は不適切です。

テーブルがサブクラス化されていない場合は、editCell() の呼び出しを探します。それらはおそらく不適切に呼び出しているため、それらの呼び出しを探して、ブレークポイントの設定またはステートメントのログを開始できます。

于 2012-04-11T22:02:31.063 に答える