Программно отменив выбор и отредактировав ячейку JTable - PullRequest
3 голосов
/ 22 марта 2011

У меня есть JTable, в котором пользователь вводит данные в ячейки. Затем есть кнопка «Сохранить», которая собирает данные таблицы, форматирует их в csv и сохраняет в файл.

Однако, если пользователь покидает последнюю ячейку, отредактированную в выбранном состоянии, и нажимает кнопку Сохранить, данные в этой ячейке считаются нулевыми, поэтому данные для этой ячейки не сохраняются в файл.

Поскольку пользователю легко забыть отменить выделение ячейки (и зачем им это нужно?), Мне нужен метод, чтобы программно отменить ее выбор. Я пробовал метод clearSelection () для таблицы, но безрезультатно.

Есть предложения?

Заранее спасибо за любую помощь.

Джон Донер

Ответы [ 5 ]

3 голосов
/ 25 июля 2014

Есть хорошая статья об этом: http://tips4java.wordpress.com/2008/12/12/table-stop-editing/ с некоторым другим способом обойти

Краткое резюме: if (table.isEditing()) table.getCellEditor().stopCellEditing();

2 голосов
/ 15 мая 2011

Вы в основном хотите программно удалить фокус с редактируемой ячейки. Вы можете попробовать следующее:

        table.editCellAt(-1, -1);

Изменяет редактируемую ячейку на (-1, -1), которая не существует. Таким образом, при удалении фокуса с текущей ячейки при нажатии кнопки его данные сохраняются. Я заметил, что ячейка (0, 0) выбрана, если это произойдет, попробуйте следующую строку после вышеуказанной строки.

        table.getSelectionModel().clearSelection();

Это должно очистить выбор из модели выбора таблицы. Надеюсь, это поможет.

1 голос
/ 15 апреля 2014

Это сработало для меня:

if (jTable3.getCellEditor() != null) {
            jTable3.getCellEditor().stopCellEditing();
}

Останавливает редактирование jtable вместо отмены редактирования и сохраняет последнее отредактированное значение.

1 голос
/ 06 мая 2013

Вы можете использовать функцию stopCellEditing из CellEditor

if(table.getCellEditor().stopCellEditing()){...}
если это удастся, получить выбранную строку из TableModel. Изменения будут там

stopCellEditing

0 голосов
/ 17 апреля 2015

У меня была похожая проблема, и это исправило ее во время создания таблицы:

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

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

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