Обеспечить дополнительное поведение при редактировании ячейки в JTable - PullRequest
0 голосов
/ 17 ноября 2009

Я создаю приложение на Java. Мне нужно предоставить дополнительное поведение при редактировании ячейки в JTable. Так что в идеале это произойдет, когда ячейка потеряет фокус после редактирования. В зависимости от некоторой постобработки я могу сбросить значение ячейки. Я попытался использовать редактор ячеек, но он не дает мне желаемого поведения.

В JTable по умолчанию, только когда я дважды щелкаю ячейку, она становится редактируемой. Но в моей реализации CellEditor ячейка становится редактируемой, как только она попадает в фокус.

Вот код для My custom CellEditor,

public class ParameterDefinitionEditor 
    extends AbstractCellEditor
    implements TableCellEditor{

    private JTable table;
    private DefaultTableModel defaultTableModel;

public ParameterDefinitionEditor(DefaultTableModel defaultTableModel,
JTable table) { 

        super();
        this.table = table;
        this.defaultTableModel = defaultTableModel;

        TableColumnModel columnModel = table.getColumnModel();
        columnModel.getColumn(0).setCellEditor(this);

}

    public Component getTableCellEditorComponent(JTable table, 
                            Object value, 
                         boolean isSelected, 
                        int row, 
                         int column) {

        if (isSelected) {
            // Do some processing.
        } 

        ((JTextField)component).setText((String)value);

        // Return the configured component
        return component;
    }

    public Object getCellEditorValue() {

        return ((JTextField)component).getText();
    }


}

Любая помощь будет оценена. Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 ноября 2009

В зависимости от некоторой постобработки I может сбросить значение ячейки.

Вы можете сделать это прямо в редакторе ячеек, если хотите, переопределив метод stopCellEditing ().

В JTable по умолчанию только когда я Двойной щелчок на ячейке становится редактируемые. Но в моей реализации CellEditor ячейка становится редактируемой как только он попадет в фокус.

Расширение DefaultCellEditor. Это контролируется методом setClickCountToStart ().

Так что в идеале это произойдет, когда ячейка теряет фокус после редактирования

Я согласен с другим предположением о том, что вам, вероятно, следует добавить TableModelListener в TableModel. Хотя в зависимости от ваших требований вы можете рассмотреть возможность использования слушателя ячеек таблицы .

1 голос
/ 17 ноября 2009

Я достиг такого типа поведения, переопределив stopCellEditing (я использую пользовательскую реализацию AbstractCellEditor)

public boolean stopCellEditing()
{
String s = (String) getCellEditorValue();
if ( ! valueValidator.isValid(s) )
  {
  editorComponent.setBorder(new LineBorder(Color.red));        
  Toolkit.getDefaultToolkit().beep();
  return false;
  }
}
else { ........
1 голос
/ 17 ноября 2009

Я не думаю, что предоставление собственного редактора ячеек служит вашей цели.

Если вы хотите выполнить некоторую обработку на основе действий пользователя, тогда ваша табличная модель должна иметь
набор слушателей (которые реализуют TableModelListener) и ваша логика должна быть помещена
в методе "tableChanged".

Проверьте также этот раздел в руководстве по Swing:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

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