Java 如何使 JTable 不可编辑

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1990817/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 02:10:11  来源:igfitidea点击:

How to make a JTable non-editable

javaswingjtable

提问by Siddharth Raina

How to make a JTablenon-editable? I don't want my users to be able to edit the values in cells by double-clicking them.

如何制作JTable不可编辑的?我不希望我的用户能够通过双击单元格中的值来编辑它们。

采纳答案by JCasso

You can use a TableModel.

您可以使用一个TableModel.

Define a class like this:

定义一个这样的类:

public class MyModel extends AbstractTableModel{
    //not necessary
}

actually isCellEditable()is falseby default so you may omit it. (see: http://docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html)

实际上isCellEditable()false默认的,所以你可以省略它。(参见:http: //docs.oracle.com/javase/6/docs/api/javax/swing/table/AbstractTableModel.html

Then use the setModel()method of your JTable.

然后使用setModel()你的方法JTable

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

回答by nelson eldoro

You can override the method isCellEditable and implement as you want for example:

您可以覆盖方法 isCellEditable 并根据需要实施,例如:

//instance table model
DefaultTableModel tableModel = new DefaultTableModel() {

    @Override
    public boolean isCellEditable(int row, int column) {
       //all cells false
       return false;
    }
};

table.setModel(tableModel);

or

或者

//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);

Note for if your JTable disappears

注意您的 JTable 是否消失

If your JTableis disappearing when you use this it is most likely because you need to use the DefaultTableModel(Object[][] data, Object[] columnNames)constructor instead.

如果您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);

回答by Siddhu

just add

只需添加

table.setEnabled(false);

it works fine for me.

这对我来说可以。

回答by freesoft

If you are creating the TableModel automatically from a set of values (with "new JTable(Vector, Vector)"), perhaps it is easier to remove editors from columns:

如果您从一组值(使用“new JTable(Vector, Vector)”)自动创建 TableModel,也许更容易从列中删除编辑器:

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
}

Without editors, data will be not editable.

没有编辑器,数据将不可编辑。

回答by Ehsan Jelodar

create new DefaultCellEditor class :

创建新的 DefaultCellEditor 类:

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

and use setCellEditor :

并使用 setCellEditor :

JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));

回答by Oleg Mikhailov

table.setDefaultEditor(Object.class, null);

回答by user3518835

I used this and it worked :it is very simple and works fine.

我使用了它并且它有效:它非常简单并且工作正常。

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