2

JTableのカスタムTableCellRenderer(ValueRenderer)があり、セルはCheckboxです。

この例ItemListenerで説明したように、チェックボックスの状態の変化(選択/選択解除)をリッスンするために、valueRendererにをアタッチしました。

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

手伝って頂けますか?

これが私のコードの一部です:

カスタム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:

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
        */
    }

}
4

1 に答える 1

2

テーブルの値がいつ変更されるかを知りたい場合は、レンダラーにリスナーを登録しないでください。テーブルモデルにリスナーを登録する必要があります。これは、テーブルによって表示されるデータが保持される場所であり、データに変更があった場合にイベントを発生させるオブジェクトです。

別の方法は、Beanのリストで構成されるカスタムテーブルモデルを使用し、テーブルモデルに、保持しているBeanのプロパティを変更させ、プロパティが変更されたときにBeanにプロパティ変更イベントを発生させることです。次に、テーブルモデルリスナーを登録するのではなく、Bean自体にリスナーを登録します(ただし、テーブルモデルは引き続きテーブルモデルイベントを発生させる必要があることに注意してください)。

于 2012-01-16T12:30:07.833 に答える