Как отразить изменения в ячейке таблицы и текстовом поле - PullRequest
0 голосов
/ 18 января 2010

Требуемое поведение сродни полю редактирования зеркального текста в Excel, когда выбрана заданная ячейка, что дает больше места для просмотра содержимого ячейки. У меня есть JTable с 5 столбцами и n строк. Столбец 2 содержит выражения, которые могут быть произвольно длинными, поэтому я бы хотел предоставить отдельный JTextField для редактирования содержимого ячейки выражения в строке. Другие поля доступны для редактирования непосредственно в таблице. Однако когда пользователь щелкает поле в столбце 2, я хочу отправить его в текстовое поле. Любое содержимое, ранее существовавшее в ячейке, должно отображаться в текстовом поле, а дополнительные изменения в текстовом поле должны отражаться в ячейке таблицы. Аналогичным образом, если кто-то дважды щелкнет ячейку и отредактирует ее напрямую, я хочу, чтобы эти изменения были отражены в текстовом поле. Таким образом, пользователь может выбрать для редактирования в любом месте, и оба обновляются. В идеале они обновляются при нажатии клавиши, но обновление при нажатии клавиши возврата допустимо.

Итак, пока у меня есть JTable, TableModel, TableModelListener, JTextField, ListSelectionListener и AbstractAction, работающие вместе для обеспечения большей части функциональности, описанной выше. Мне не хватает отражения прямых изменений ячейки таблицы в текстовом поле и обновлений для каждого нажатия клавиши.

Есть ли у них идеи о том, как лучше построить это поведение?

1 Ответ

2 голосов
/ 18 января 2010

Ну, если вы хотите получить данные из таблицы в ячейку, то вы добавляете код в функцию setValueAt () вашего TableModel, которая должна запускаться, когда пользователь изменяет содержание в редактируемой ячейке. Я не думаю, что это будет обновлять для каждого нажатия клавиши, хотя.

Если вы хотите переместить данные из в текстовое поле в , используйте следующий код ячейки таблицы:

myJTextField.getDocument().addDocumentListener(new MyDocumentListener());

Где MyDocumentListener - это реализация javax.swing.event.DocumentListener интерфейса

То, что будет получать обновления для каждого нажатия клавиш из коробки в таблицу . Но с другой стороны это немного сложнее.

Есть два способа сделать это

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

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

...