Проверка ввода с использованием TableCellEditor в jTables - PullRequest
1 голос
/ 06 декабря 2011

У меня есть JTable с 3 столбцами.Один из столбцов должен иметь целочисленное значение, и я должен проверить ввод, прежде чем ячейка потеряет фокус.

Я использовал редактор ячеек и переопределил функцию stopCellEditing ().Я написал проверку в stopCellEditing, и она сохраняет фокус на ячейке, но моя проблема заключается в следующем:

  • столбец не может принимать более одного значения (если я перехожу к редактированию другой ячейки,содержимое исчезает !!)
  • Я не могу нажать Enter, если я редактирую одну из ячеек в этом столбце!

Это мой класс редактора:

public class MyEditor extends DefaultCellEditor implements TableCellEditor {

    public MyEditor() {
        super(new JTextField());
    }

    @Override
    public boolean stopCellEditing() {
        Object obj = delegate.getCellEditorValue();
        if (obj is not an integer) {
            return false;
        }
        return true;
    }

и вот как я использую в своем фрейме:

studentTable.getColumnModel (). GetColumn (2) .setCellEditor (new MyEditor ());

Плз, помогите мне:)

1 Ответ

2 голосов
/ 07 декабря 2011

Один из столбцов должен иметь целочисленное значение

Для этого не нужно писать собственный редактор.

Все, что вам нужно сделать, это переопределить метод getColumnClass() JTable или TableModel, и таблица будет использовать поставляемый редактор целых чисел.

Относительно кода, который вы разместили:

  1. Он не будет скомпилирован, поскольку ваше условие if недействительно. Нам нужен настоящий код, чтобы мы могли обнаружить возможные логические ошибки. Код также должен быть размещен в виде SSCCE .

  2. Нет необходимости ссылаться на переменную делегата. Просто вызовите метод getCellEditor () напрямую.

  3. Не знаю, имеет ли это значение, когда я переопределяю stopCellEditing () вместо того, чтобы возвращать true, я использую:

    return super.stopCellEditing();

...