gpt4 book ai didi

java - 不使用 setModel() 使 Jtable Noneditable

转载 作者:行者123 更新时间:2023-11-29 03:16:45 25 4
gpt4 key购买 nike

我想让我的 JTable 不可编辑

当我使用以下代码使用 SetModel() 设置行时:

jTable1.setModel(DbUtils.resultSetToTableModel(rs)); //Resultset is added as each row using r2xml JAR file

我不能使用下面的代码:

jTable1.setModel(new DefaultTableModel() {

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

因为我们不能为 jTable 使用两个 setModel()。

如何克服这个问题?我想设置结果并使 jTable 不可编辑。

最佳答案

这里有两种方法可以实现:

  1. 创建并使用您自己的 TableModel 实现,它将所有调用转发给 DbUtils 返回的表模型,isCellEditable() 除外在其中您可以始终返回 false 从而禁用编辑。例如,您自己的表模型可以获得 DbUtils 返回的模型作为构造函数参数。

  2. 您可以扩展 JTable 并覆盖其 isCellEditable() 方法以返回 false(默认情况下它调用模型的 isCellEditable() 方法)。也许其他 Swing 爱好者会认为这是一种邪恶的 hack,但这是解决您的问题的最简单方法。

阐述方法#1

这是创建模型的方法:

class MyModel implements TableModel {
private final TableModel m;
public MyModel(TableModel m) {
this.m = m;
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// This is how we disable editing:
return false;
}

// The rest of the methods just forward to the other model:

@Override
public int getRowCount() {
return m.getRowCount();
}

@Override
public int getColumnCount() {
return m.getColumnCount();
}

// ...and all other methods which I omit here...
}

这就是你如何使用它:

jTable1.setModel(new MyModel(DbUtils.resultSetToTableModel(rs)));

方法#2 的详细说明

扩展 JTable 甚至可以是匿名类:

JTable jtable1 = new JTable() {
@Override
public boolean isCellEditable(int row, int column) {
// This is how we disable editing:
return false;
}
};

并使用它:

// You can set any model, the table will not be editable because we overrode
// JTable.isCellEditable() to return false therefore the model will not be asked
// if editable.

jTable1.setModel(DbUtils.resultSetToTableModel(rs));

关于java - 不使用 setModel() 使 Jtable Noneditable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26098105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com