5

次の動作で列を に追加しようとしてJTableいます (Windows エクスプローラーや同様のシェルに似ています)。

  • 通常どおり、セルを 1 回クリックして選択できます。
  • セルをダブルクリックして、別のアクション (外部プログラムの起動) を実行できます。
  • セルの値 (文字列) は、(一時停止した後に) もう一度シングルクリックするかF2、セルが強調表示されているときに を押すことで編集できます。

ダブルクリックによってセルの編集がトリガーされてはなりませが、可能であれば他のデフォルトの編集トリガーを操作できるようにしたいと考えています。

テーブルにa を追加しMouseListenerて、すべての s を消費しようとしましたMouseEventが、これは機能しません。それtrueから戻ったisCellEditable()場合、リスナーはクリック イベントを受け取りませんが、戻った場合はfalse機能しF2なくなります。

イベントリスナーのみを使用してこれを実現できますか? PLAF関数をいじらないようにしたいです。

4

3 に答える 3

4

DefaultCellEditorには、編集のためのマウスクリックを制御するためのsetClickCountToStart()メソッドがあります。デフォルトは2です。これを変更してもF2機能には影響しません。

したがって、編集をトリプルクリックに設定できます。

2回のシングルクリックを処理して編集を開始する方法は正確にはわかりませんが、タイマーを使用して最初のクリックを追跡し、2回目のシングルクリックが時間間隔内にある場合は編集を行うと思います。

于 2009-08-12T20:37:11.660 に答える
3

独自の cellEditor と ovveride を作成する必要があります

public boolean isCellEditable( EventObject e )

eventObject の clickCount を使用して、シングル クリックとダブル クリックを区別できます。

単一のクリックで選択されたセル上にある場合は true を返すことができ、それ以外の場合は false を返します。

行と列を取得する

int row = ( (JTable) e.getSource() ).rowAtPoint(e.getPoint());
int column = ( (JTable) e.getSource() ).columnAtPoint(e.getPoint());

F2 を有効にするには、カスタム inputMap en actionMap エントリを追加できます

similar too
table.getInputMap().put(KeyStroke.getKeyStroke("DOWN"), "doMyArrowDown");
table.getTable().getActionMap().put("doMyArrowDown", new ArrowDownAction()); 

そしてあなたの行動から、自分でセル編集を開始することができます

table.editCellAt(row, column );
于 2009-08-13T07:35:02.797 に答える
1

既存のCellEditorを aでラップして へのProxy呼び出しをインターセプトしisCellEditable、すべてのマウス イベントに対して false を返し、他のすべての呼び出しを元の に委譲することで、これを解決しましたCellEditor

これは camickr のソリューションよりも少し複雑ですが、すべてのエディターで機能します (全部で 4 つ持っています)。

于 2009-08-12T23:29:18.710 に答える