2012-01-16 12 views
2

JTableのカスタムTableCellRenderer(ValueRenderer)があり、セルはCheckboxです。itemStateChangedのTableCellRendererの行を取得します

私はこのexampleで述べたように、チェックボックスの状態変化(選択解除/選択)を聞くことがvalueRendererにItemListenerを添付しています。

私の問題はitemStateChanged(ItemEvent e)の中に、ItemEventのソースがValueRendererであることを知っているこのチェックボックスが含まれている行を取得する方法がわかりません。

私を助けることができますか?あなたは、テーブル内のとき、いくつかの値の変化を知りたい場合は、

public class TableRowCheckBoxListener implements ItemListener { 

    private JTable hqlRequestTable; 

    public TableRowCheckBoxListener(JTable hqlRequestTable) { 
     this.hqlRequestTable = hqlRequestTable; 
    } 

    @Override 
    public void itemStateChanged(ItemEvent e) { 

     /*How do I get the row which contains the checkbox clicked knowing that : 
      e.getSource() == ValueRenderer 
      e.getItem() == ValueRender 
     */ 
    } 

} 
+0

?この例を再度読んだら、itemstateのリスニングはレンダラーではなくエディターで行われますが、そこには行の列もありません。 JTableは、編集を中止する場合に必要な行と列のマッピングを処理します。 – Peter

+1

レンダラは何もしない、完全に受動的な奴隷ですが、塗料メカニズムは、それが適切と判断たびに、いくつかの実成分に自分renderingComponentを刻印します。彼らにリスナーを登録しないでください。彼らの通知は意味をなさないのです。 – kleopatra

+0

@kleopatraそれは私によってではなく、博士によって行われました。 [例](https://sites.google.com/site/drjohnbmatthews/table)。だから私は彼のコードを取って、私のニーズにそれを修正しようとしました –

答えて

2

カスタムTableCellRender:

public class ValueRenderer extends JCheckBox implements TableCellRenderer { 

    @Override 
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) { 
     this.setSelected((Boolean) value); 
     return this; 
    } 

} 

のItemListenerここ

は、私のコードの一部でありますレンダラーにリスナーを登録してはいけません。表で表示されるデータが保持されることだし、それは何がデータに変更された場合、イベントを発生させたオブジェクトです:あなたは、テーブルモデルのリスナーを登録する必要があります。

代替はテーブルモデルは、それが保持している豆のプロパティを変更する必要があり、豆のリストで構成されるカスタム・テーブル・モデルを使用し、豆の火災にプロパティ変更イベントプロパティの変更を持っていることです。テーブルモデルリスナーを登録するのではなく、Bean自体にリスナーを登録します(ただし、テーブルモデルはテーブルモデルイベントを発生させる必要があります)。あなたがそれを必要としない理由

+0

を使用して、それを解決しましたか? –

+0

ところでhttp://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html –

+0

を読む、あなたは男だ(Javaの男)。あなたの答えのおかげで、私がやっているばかげた仕事が見つかりました。ありがとう! –

関連する問題