У вас не может быть public voidметода, возвращающего логическое значение.
Geo
1
Также методisCellEditable
Мэтт
Указанный вами подход работает, но в AbstractTableModel нет такого метода, как isEditable. Существует метод isCellEditable (int, int), который принимает в качестве параметров rowIndex и coulmnIndex. Пользователь может выборочно включить / отключить редактирование для конкретной строки / столбца, переопределив метод isCellEditable, или может использовать реализацию по умолчанию, чтобы отключить редактирование для всех ячеек.
sateesh 02
150
Вы можете переопределить метод isCellEditable и реализовать как хотите, например:
Это также решение для правильной работы событий двойного щелчка с JTable. Двойной щелчок обычно используется ячейкой, когда она переходит в режим редактирования, и это удерживает ячейку от этого и вместо этого отправляет двойной щелчок в сам JTable. Спасибо за решение, Нельсон!
анахорет
2
@Jop, тогда что-то не так в другом месте вашего кода - таблица никогда не исчезает только потому, что модель таблицы не редактируется ...
kleopatra
1
@DougHauf, похоже, вы не знаете Java или действительно какой-либо язык, так как большинство языков используют тот же синтаксис для логических операций ... который действительно возвращает логическое значение ... Я бы порекомендовал вам найти очень простой Java учебник и начните с самого начала. Попытка прыгнуть в такой ход приведет к тому, что вы все поймете неправильно.
searchchengine27 01
1
@DougHauf, == - это псевдоним для функции Equals, которая сравнивает объекты (слева и справа) и возвращает логическое значение. Я полагаю, вы использовали оператор, если он оценивает логические значения и обычно используется с такого рода выражениями, например, если (a == b) что-то делает. Попробуйте вывести a == b или просто назначить это переменной и понять результат.
Нельсон Элдоро 01
1
Вышеупомянутое исправление также не работает для меня. Это приводит к исчезновению столбца таблицы и элементов данных. Моя таблица создана с помощью table = new JTable (tempTable, columnNames);, где tempTable - это String [] [], а имена столбцов - это String []. Я считаю, что проблема вызвана тем, что new DefaultTableModel () не указывает имена данных и столбцов для модели таблицы. Как указать их в модели данных. Я попробовал table.setModel (tableModel (tempTable, columnNames));, но это вызывает ошибку «не удается найти символ».
Это замечательно, если вы не используете нестандартную модель таблицы!
Kingsolmn
27
Но вы не сможете выбрать ячейку или строку.
tianz
3
В некоторых L&F это будет выглядеть "серым".
Stommestack
2
Это работает. Спасибо. Однако мне все же хотелось бы знать, почему метод модели данных Нельсона вызывает исчезновение столбца и элементов данных таблицы.
user1164199
1
У меня хорошо работает!
Colby Cox
10
Если вы создаете TableModel автоматически из набора значений (с помощью «new JTable (Vector, Vector)»), возможно, проще удалить редакторы из столбцов:
JTable table =newJTable(my_rows, my_header);for(int c =0; c < table.getColumnCount(); c++){Class<?> col_class = table.getColumnClass(c);
table.setDefaultEditor(col_class,null);// remove editor}
-1 случайный взлом в ненадлежащих местах никогда не вариант
kleopatra
Объясните, пожалуйста, почему это «случайный взлом в неположенном месте»? Согласно документу setDefaultEditor () : «Если редактор имеет значение NULL, удаляет редактор по умолчанию для этого класса столбца».
FreeSoft
да, и возвращается к значению по умолчанию для Object ;-) Таким образом, вы на самом деле не отключаете редактирование (просто случайно, если один из столбцов имеет тип Object), также вам не хватает каких-либо столбцов, которые могут иметь собственный редактор. Там является апи предназначен для реализации на контроль клеточного редактируемости, и это модель. Все остальное взломано и как таковое неуместно.
kleopatra
Я понимаю вашу точку зрения. Но что я понял из api, так это то, что если я создам таблицу быстрым способом (с помощью «new JTable (Vector, Vector)»), то таблица будет иметь редакторы по умолчанию для всех ее столбцов. Итак, если я запустил «table.setDefaultEditor (column, null)», то я удалю редактор по умолчанию из столбца, поэтому в столбце не будет редактора, и столбец не будет редактироваться. Это случится?
freesoft
Я создал таблицу таким образом new JTable(Vector, Vector)и работал на себя. Мне не нужен редактор ни в одной ячейке, поэтому мой голос за вас.
Дани Санкас
3
Я использовал это, и это сработало: это очень просто и отлично работает.
Ответы:
Вы можете использовать
TableModel
.Определите такой класс:
на самом деле
isCellEditable()
этоfalse
по умолчанию , так что вы можете пропустить его. (см .: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )Тогда используйте
setModel()
метод вашегоJTable
.источник
public void
метода, возвращающего логическое значение.isCellEditable
Вы можете переопределить метод isCellEditable и реализовать как хотите, например:
или
Обратите внимание, если ваш JTable исчезнет
Если ваш
JTable
исчезает, когда вы используете это, скорее всего, вам нужноDefaultTableModel(Object[][] data, Object[] columnNames)
вместо этого использовать конструктор.источник
источник
просто добавь
Он отлично работает для меня.
источник
Если вы создаете TableModel автоматически из набора значений (с помощью «new JTable (Vector, Vector)»), возможно, проще удалить редакторы из столбцов:
Без редакторов данные нельзя будет редактировать.
источник
new JTable(Vector, Vector)
и работал на себя. Мне не нужен редактор ни в одной ячейке, поэтому мой голос за вас.Я использовал это, и это сработало: это очень просто и отлично работает.
источник
создать новый класс DefaultCellEditor:
и используйте setCellEditor:
источник