Как сделать JTable недоступным для редактирования

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

Вы можете использовать TableModel .

Определите class следующим образом:

 public class MyModel extends AbstractTableModel{ //not necessary } 

Фактически isCellEditable() по умолчанию является false , поэтому вы можете его опустить. (см .: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html )

Затем используйте метод setModel() вашего JTable .

 JTable myTable = new JTable(); myTable.setModel(new MyModel()); 

Вы можете переопределить метод isCellEditable и реализовать, как вы хотите, например:

 //instance table model DefaultTableModel tableModel = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { //all cells false return false; } }; table.setModel(tableModel); 

или

 //instance table model DefaultTableModel tableModel = new DefaultTableModel() { @Override public boolean isCellEditable(int row, int column) { //Only the third column return column == 3; } }; table.setModel(tableModel); 

Обратите внимание, если ваш JTable исчезает

Если ваш JTable исчезает, когда вы используете это, скорее всего, потому что вместо этого вам нужно использовать конструктор DefaultTableModel(Object[][] data, Object[] columnNames) .

 //instance table model DefaultTableModel tableModel = new DefaultTableModel(data, columnNames) { @Override public boolean isCellEditable(int row, int column) { //all cells false return false; } }; table.setModel(tableModel); 

просто добавь

 table.setEnabled(false); 

Он отлично работает для меня.

 table.setDefaultEditor(Object.class, null); 

Если вы создаете TableModel автоматически из набора значений (с помощью «нового JTable (Vector, Vector)»), возможно, удалить редакторов из столбцов проще:

 JTable table = new JTable(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 } 

Без редакторов данные не будут редактироваться.

Я использовал это, и он работал: он очень прост и отлично работает.

 JTable myTable = new JTable(); myTable.setEnabled(false); 

создать новый class DefaultCellEditor:

 public static class Editor_name extends DefaultCellEditor { public Editor_name(JCheckBox checkBox) { super(checkBox); } @Override public boolean isCellEditable(EventObject anEvent) { return false; } } 

и используйте setCellEditor:

 JTable table = new JTable(); table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox())); 
  • Печать большого компонента Swing
  • Любые простые (и современные) Java-фреймворки для встраивания фильмов в приложение Swing?
  • GUI работает со скоростью 30 кадров в секунду?
  • Отображение гистограммы данных изображения
  • Какова связь между ContentPane и JPanel?
  • Создайте текстовое поле автозаполнения на Java с выпадающим списком
  • Есть ли альтернатива JPasswordField?
  • Проблемы с добавлением JTextArea
  • Как добавить гиперссылку в JLabel
  • Рисование прямоугольника на JPanel
  • Как установить значок в столбце JTable?
  • Давайте будем гением компьютера.