Как отразить изменения в ячейке таблицы и текстовом поле

StackOverflow https://stackoverflow.com/questions/2084394

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Есть два способа, которыми вы могли бы это сделать

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top