Как сделать JTable недоступным для редактирования
Как сделать JTable
для редактирования? Я не хочу, чтобы мои пользователи могли редактировать значения в ячейках, дважды щелкнув их.
- JTable с JPopupMenu
- Как добавить прослушиватель действий, который прослушивает несколько кнопок
- Можем ли мы использовать стиль кнопки GTK + 2.0 в Java Swing?
- Поместите JTable в JTree
- Как представить двойные значения в виде кругов в 2d-матрице в java
- Перетаскивание пользовательского объекта из JList в JLabel
- Как подключить одну панель к другой
- JFrame.dispose () vs System.exit ()
Вы можете использовать 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()));