3

JTable を右クリックして、コードを「ポスト リスナー コード」に挿入しました。

追加するオプションが表示されない

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
  public void valueChanged(ListSelectionEvent evt) {

JTable の「デザイン」ビューの「イベント」に。デザイン ビューから valueChanged(ListSelectionEvent evt) を追加する方法があると確信していますが、どのように?

多分それはバグですか?

行選択変更イベントは、JTable 自体ではなく、JTable の ListSelectionModel によって生成されるため、このイベントをコンポーネント インスペクタで (JTable のイベントとして) 表示することはできません。このイベントの処理は、次のように手動で行う必要があります。

jTable1.getSelectionModel().addListSelectionListener(
    new javax.swing.event.ListSelectionListener() {
        public void valueChanged(ListSelectionEvent evt) {
            customRowSelectionEventHandler(evt);
        }
    }
);

「青い」「管理された」コードの外で、JTable の ListSelectionModel を取得する方法はあるのでしょうか。

4

2 に答える 2

5

ListSelectionListenerソースの編集可能な部分で独自のものを作成できます。jTable1テーブルのPost-init Codeプロパティでクラス変数の選択モデルにリスナーのインスタンスを追加できます。

jTable1.getSelectionModel().addListSelectionListener(new MyListener());

リスナー自体は次のようになります。

private static class MyListener implements ListSelectionListener {

    @Override
    public void valueChanged(ListSelectionEvent e) {
        System.out.println(e.getFirstIndex());
    }
}
于 2012-05-06T07:16:33.723 に答える
2

おそらくあなたは延長することができますInputVerifier

これはまさに意図されたものではありませんが、用途に合わせて調整できます。

public class TableVerifier extends InputVerifier {

    @Override
    public boolean verify(JComponent input) {
        assert input instanceof JTable : "I told you I wanted a table!";

        JTable inputTable = (JTable) input;
        int numberColumns = inputTable.getColumnCount();
        int numberRows = inputTable.getRowCount();

        for (int column = 0; column < numberColumns; column++) {
            for (int row = 0; row < numberRows; row++) {
                //DO YOUR STUFF
            }
        }
        return true;
    }
}
于 2012-05-06T05:35:34.877 に答える