JTable слушатель изменения значения ячейки - PullRequest
5 голосов
/ 30 сентября 2011

Какой приемник можно использовать для реагирования на событие изменения значения ячейки JTable? Я пытался использовать TableModelListener, но либо я ошибся, либо этот слушатель не реагирует на изменение содержимого ячейки.

Мне нужно либо изменить содержимое ячейки, либо потерять фокус ячейки. Каков наилучший способ сделать это? Спасибо.

Ответы [ 2 ]

5 голосов
/ 27 ноября 2012
class extends JTable {

.... (внутри конструктора)

addPropertyChangeListener(new PropertyChangeListener() {

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if ("tableCellEditor".equals(evt.getPropertyName())) {
            if (isEditing())
                processEditingStarted();
            else
                processEditingStopped();
        }
    }
});

... (конечный конструктор)

protected void processEditingStopped() {
    System.out.println("save " + editingRow + ":" + editingColumn);
}

protected void processEditingStarted() {
    System.out.println("edit " + editingRow + ":" + editingColumn);
    if (editRow > -1 && editColumn > -1)
        oldValue = (String) model.getValueAt(editRow, editColumn);
}

}

подробнее здесь:http://tips4java.wordpress.com/2009/06/07/table-cell-listener/

2 голосов
/ 22 октября 2011

Простой способ реагировать на изменение значений - это настроить модель таблицы и реагировать на setValueAt().

Если вы хотите удостовериться, что " stick " правит, когда оно теряет фокус, вызовите это на столе.

table.putClientProperty("terminateEditOnFocusLost", Boolean.TRUE); 
...