Как получить JTable selectedRow и selectedColumn во время события FocusLost - PullRequest
2 голосов
/ 09 июня 2011

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

Однако приведенное ниже условие всегда ложно, поскольку источником всегда является либо JTextField, либо JComboBox.

public void focusLost(FocusEvent e) {
int row, col;

Object source = e.getSource();
if(((Component) source).getParent() instanceof JTable_Ext){  //<-- always false
    table = (JTable_Ext) ((Component) source).getParent();
    row = table.getSelectedRow();
    col = table.getSelectedColumn();
}

Чтобы смягчить вышесказанное, я помню строку и столбец во время FocusGained (как переменная уровня класса). Проблема в том, что если пользователь щелкает очень быстро повсюду в JTable, то информация о строках и столбцах будет не синхронизирована.

Есть ли способ получить Row и Col во время FocusLost? если нет, есть ли лучший способ сделать это?

Ответы [ 4 ]

0 голосов
/ 09 июня 2011

Однако приведенное ниже условие всегда ложно, поскольку источником всегда является либо JTextField, либо JComboBox.

Это означает, что событие focusLost генерируется при начале редактирования ячейки.Итак, вопрос в том, почему ты это делаешь?Я думаю, что вам нужно заявить о ваших реальных требованиях, потому что попытка решения не представляется целесообразной.

0 голосов
/ 09 июня 2011

Не могли бы вы просто вести запись строки и столбца, используя

table.getSelectionModel().addListSelectionListener(...);
table.getColumnModel().getSelectionModel().addListSelectionListener(...);

То есть каждый раз, когда пользователь нажимает кнопку, обновлять его, а не только события фокуса?

0 голосов
/ 09 июня 2011

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

В противном случае вы можете взглянуть на .tableChanged() и связанный TableModelEvent, который дает вам последний измененный ряд / столбец. Вы можете сохранить переменную, которая всегда обновляется до последней строки / столбца события. Я предполагаю, что если вы измените номер ячейки, не нажимая return, он, тем не менее, будет зарегистрирован как событие.

0 голосов
/ 09 июня 2011

Ну, есть oppositeComponent.Странно то, что если этот прослушиватель присоединен к таблице, в документации говорится, что таблица должна быть компонентом «источника» (поскольку это событие FocusLost, а компонент, потерявший фокус, является самой таблицей).

http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/FocusEvent.html#getOppositeComponent%28%29

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