繁体   English   中英

使Jtable不可编辑,而无需使用setModel()

[英]Make Jtable Noneditable without using setModel()

我想使我的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爱好者会认为这是一个恶作剧,但这是解决您问题的最简单方法。

详细方法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));

您只需在程序jTable.disable()中编写一行,就可以使用此代码来使jTable不可编辑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM