Как указано в заголовке, у меня есть JTable
, и я не могу редактировать «произвольные» столбцы. У меня есть 4 столбца, и только первый столбец доступен для редактирования. В первом столбце есть файлы и специальный редактор, в следующих двух столбцах есть строки, а в последнем столбце есть целые числа. Я использую пользовательскую модель, и я возвращаю true из метода isCellEditable
. Конечно, сначала я обратился за помощью к нескольким веб-сайтам, но я не смог найти ничего, что помогло бы. Я использовал исходный код java для переопределения нескольких методов JTable
и вставки операторов печати. В частности, я обнаружил, что table.editCellAt (строка, col) всегда возвращает false, поскольку компонент редактирования, возвращаемый из редактора ячейки, всегда равен нулю. Поэтому я, естественно, попытался заменить редактор, используя table.setDefaultEditor(String.class, new MyEditor())
. Как это ни странно, это DID NOT работа. Все редакторы столбцов String по-прежнему были GenericEditor, которые JTable использует по умолчанию. Затем я попытался добавить редактор каждый столбец, выполнив следующие действия:Невозможно редактировать кажущиеся произвольными столбцы JTable
TableColumnModel model = table.getColumnModel();
for(int i = 1; i < model.getColumnCount(); i++){
model.getColumn(i).setCellEditor(new MyEditor());
}
Обратите внимание, что я начинается на 1, потому что первый столбец уже имеет соответствующий редактор. У меня нет идей в этот момент, поэтому я пришел к хорошим людям в Stack Overflow для некоторой помощи.
Edit: Я использую DefaultTableModel
, я просто отменяют isCellEditable
, чтобы убедиться, что он всегда возвращает истину (хотя и DefaultTableModel
предполагается сделать это будет по умолчанию). Я сделал это, чтобы уменьшить количество бесполезных, расточительных отладочных ответов. Кроме того, тот факт, что один столбец доступен для редактирования, но другие, похоже, не указывают на то, что проблема находится в другом месте.
Редактировать: Похоже, проблема осталась с созданием столбцов. Профессор предложил изменить setAutoCreateColumnsFromModel
и, похоже, исправил проблему.
У вас есть собственный код, и он не работает? Ну вот, где я начну. Сначала получите код, работающий с использованием классов, которые поставляются с JDK. Для этого используйте DefaultTableModel. Затем, как только вы доказали, что это работает, вы делаете одно изменение за раз с вашим пользовательским кодом. Когда он перестает работать, вы знаете, где проблема, и вы можете опубликовать свой SSCCE (http://sscce.org), показывая проблему. – camickr
@gerenba: Я перенес вашу дополнительную информацию на вопрос. Пожалуйста, верните, если это неверно. – trashgod
Учебник Swing имеет простой пример использования DefaultTableModel, который может быть хорошим основанием SSCCE. http://download.oracle.com/javase/tutorial/uiswing/components/table.html – trashgod