不使用setModel()使Jtable不可编辑

时间:2014-09-29 10:48:56

标签: java swing jtable

我想让我的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()。

如何克服这个问题? 我想setresult并使jTable不可编辑。

2 个答案:

答案 0 :(得分:4)

以下是实现这一目标的两种方法:

  1. 创建并使用您自己的TableModel实现,该实施将所有调用转发给DbUtils返回的表模型,但isCellEditable()除外,false始终可以返回DbUtils因此禁用编辑。例如,您自己的表模型可以将JTable返回的模型作为构造函数参数。

  2. 您可以扩展isCellEditable()并覆盖其false方法以返回isCellEditable()(默认情况下,它会调用模型的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... } 方法)。也许其他Swing爱好者会认为这是一个邪恶的黑客,但这是解决你的问题最简单的方法。

  3. 阐述方法#1

    这是您创建模型的方法:

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

    这就是你如何使用它:

    JTable

    方法#2

    的详细说明

    扩展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));
    

    使用它:

    {{1}}

答案 1 :(得分:0)

您可以使用此代码制作不可编辑的jTable 只需在程序中写一行 jTable.disable();