如何使 JTable 不可编辑

发布于 2024-08-16 05:20:08 字数 62 浏览 6 评论 0原文

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

爱要勇敢去追 2024-08-23 05:20:08

您可以重写 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);

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

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

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

//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);
叹倦 2024-08-23 05:20:08
table.setDefaultEditor(Object.class, null);
table.setDefaultEditor(Object.class, null);
听风念你 2024-08-23 05:20:08

只需添加

table.setEnabled(false);

它对我来说效果很好。

just add

table.setEnabled(false);

it works fine for me.

坏尐絯 2024-08-23 05:20:08

您可以使用 TableModel

定义一个这样的类:

public class MyModel extends AbstractTableModel{
    //not necessary
}

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

然后使用 JTablesetModel() 方法。

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

You can use a TableModel.

Define a class like this:

public class MyModel extends AbstractTableModel{
    //not necessary
}

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

Then use the setModel() method of your JTable.

JTable myTable = new JTable();
myTable.setModel(new MyModel());
甜嗑 2024-08-23 05:20:08

如果您从一组值自动创建 TableModel(使用“new 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
}

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

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:

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.

只想待在家 2024-08-23 05:20:08

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

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

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

JTable myTable = new JTable();
myTable.setEnabled(false);
看春风乍起 2024-08-23 05:20:08

创建新的 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()));

create new DefaultCellEditor class :

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 :

JTable table = new JTable();
table.getColumn("columnName").setCellEditor(new Editor_name(new JCheckBox()));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文