Получить строку TableCellRenderer для itemStateChanged - PullRequest
2 голосов
/ 16 января 2012

У меня есть пользовательский TableCellRenderer (ValueRenderer) для JTable, ячейка - Checkbox.

Я добавил ItemListener к valueRenderer для прослушивания изменения состояния флажка (выбрано / снято), как указано в этом примере .

Моя проблема в том, что внутри itemStateChanged(ItemEvent e) я не знаю, как получить строку, в которой содержится этот флажок, зная, что источником ItemEvent является ValueRenderer.

Вы можете мне помочь?

Вот мой код:

Пользовательская 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
        */
    }

}

1 Ответ

2 голосов
/ 16 января 2012

Если вы хотите знать, когда какое-либо значение изменяется в вашей таблице, вы не должны регистрировать прослушиватель в рендерере.Вы должны зарегистрировать прослушиватель в модели таблицы: там хранятся данные, отображаемые таблицей, и это объект, который генерирует событие, если что-либо изменяется в данных.

Альтернатива - использовать пользовательскую таблицумодель, состоящая из списка bean-компонентов, позволяющая модели таблицы изменять свойства bean-компонентов, которые она содержит, и заставлять bean-компонент вызывать событие изменения свойства при изменении свойства.Затем вы зарегистрируете прослушиватели на самих bean-компонентах, а не регистрируете прослушиватель модели таблицы (обратите внимание, что модель таблицы все же должна запускать события модели таблицы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...