2017-11-02 7 views
0

JTable(マスター)にListSelectionListenerを追加して、行が選択されたときにキャッチし、選択した行に応じて別のJTable(詳細)を設定します。 いくつかの要件が変更され、条件が満たされた場合、ユーザーが別の行をクリックしたときにYES/NOオプションを使用してJOptionPaneを表示し、YESをクリックして新しい行を選択できる場合にのみ表示します。 これをどうすれば実現できますか?常にListSelectionListenerを使用しますか?私はそれが選択が行われた後にのみ提起されるので、そうは思わない。JTable:ユーザー入力に応じて行を選択するのを待つ

答えて

1

はい、

table.getSelectionModel().addListSelectionListener(new ListSelectionListener(){ 
     public void valueChanged(ListSelectionEvent event) { 
      // do some actions here, for example 
      // print first column value from selected row 
      System.out.println(table.getValueAt(table.getSelectedRow(), 0).toString()); 
     } 
    }); 
+0

ありがとうございます。私は、valueChanged()が起動されたときに、新しい選択行がすでに設定されているため、ユーザーがJOptionPaneで「はい」または「今」をクリックしていたためです。代わりに、私はそれを待つ必要がある –

+0

ああ、sr私の勘違いについては、https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#modelchangeに説明されているようにTableModelListenerを追加する必要があります。 リスナーで他のセル値の値をプログラマチックに更新したら、model.fireTableCellUpdatedを呼び出してスウィングに変更を知らせる必要があります https://docs.oracle.com/javase/6/docs /api/javax/swing/table/AbstractTableModel.html#fireTableCellUpdated%28int,%20int%29 –

0

確認のために、ユーザーが別の行にクリックし、

何ユーザーが別の行に移動するためにアップ/ダウンの矢印キーを使用する場合は?

両方の場合のデフォルトの動作は、行を自動的に選択することです。

JTableのchangeSelection(...)メソッドをオーバーライドすることができます。私はこれがマウスやキーボードのロジックによって行の選択を変更するために呼び出されるメソッドだと思います。

ロジックを追加してオプションペインを表示し、「はい」を選択するとsuper.changeSelection(...)が呼び出されます。

しかし、このオプションペインがポップアップし続けると、キーボードを使用してテーブルを下にスクロールしてみると、私はイライラします。マウスとキーボードの両方を効果的にサポートするユーザーインターフェイスを設計することを忘れないでください。

関連する問題