Java 使JTABLE列不可编辑

Java 使JTABLE列不可编辑,java,swing,jtable,Java,Swing,Jtable,我将我的JTable命名为tblList,并希望某个列不可编辑。我已经找到下面的代码,应该做的工作,但是,我不能为我的生活使它在我现有的表工作。我想我的问题是,如何在我现有的名为tblList的表上调用下面的代码 JTable model = new JTable(){ @Override public boolean isCellEditable(int row, int column){ return column==3 false; }; };

我将我的JTable命名为tblList,并希望某个列不可编辑。我已经找到下面的代码,应该做的工作,但是,我不能为我的生活使它在我现有的表工作。我想我的问题是,如何在我现有的名为tblList的表上调用下面的代码

JTable model = new JTable(){

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

这样做的方法是拥有自己的
TableModel
,并覆盖
公共布尔值isCellEditable(int-rowIndex,int-columndex)。根据经验,我们不应该重写
JTable
方法。供参考,以下是JTable的功能-将调用委托给数据模型:

    public boolean isCellEditable(int row, int column) {
        return getModel().isCellEditable(convertRowIndexToModel(row),
                                         convertColumnIndexToModel(column));
    }
我们的做法是: 步骤1:创建表模型:

public class SimpleTableModel extends DefaultTableModel {
    @Override
    boolean isCellEditable(int row, int col) {
        // Your logic goes here
    }
}
步骤2:将该类的实例传递给
JTable的构造函数

JTable table = new JTable (new SimpleTableModel());
请在下面找到一个工作示例(这不是我通常编写代码的方式,您也不应该这样做,只是给您一个示例):


这样做的方法是拥有自己的
TableModel
,并覆盖
公共布尔值isCellEditable(int-rowIndex,int-columndex)。根据经验,我们不应该重写
JTable
方法。供参考,以下是JTable的功能-将调用委托给数据模型:

    public boolean isCellEditable(int row, int column) {
        return getModel().isCellEditable(convertRowIndexToModel(row),
                                         convertColumnIndexToModel(column));
    }
我们的做法是: 步骤1:创建表模型:

public class SimpleTableModel extends DefaultTableModel {
    @Override
    boolean isCellEditable(int row, int col) {
        // Your logic goes here
    }
}
步骤2:将该类的实例传递给
JTable的构造函数

JTable table = new JTable (new SimpleTableModel());
请在下面找到一个工作示例(这不是我通常编写代码的方式,您也不应该这样做,只是给您一个示例):


那不会编译。它将返回“column==3”(true)或“false”(false)。请尝试“returncolumn==3?false:true”;或者干脆
returncolumn!=3;。我也看到了这一点,但如何将其直接应用于现有的jtable?当我使用我发布的代码时,在我看来,它正在生成一个新表,并以相同的方式保留我现有的JTable。请容忍我,我还是个新手。谢谢@joppiew如果您正在寻找的功能是由
表格模型定义的,那么您永远不应该需要扩展
JTable
来实现此功能,因为它可能是无法编译的重复功能。它将返回“column==3”(true)或“false”(false)。请尝试“returncolumn==3?false:true”;或者干脆
returncolumn!=3;。我也看到了这一点,但如何将其直接应用于现有的jtable?当我使用我发布的代码时,在我看来,它正在生成一个新表,并以相同的方式保留我现有的JTable。请容忍我,我还是个新手。谢谢@Joppiew如果您正在寻找的功能是由
表格模型定义的,那么您永远不应该需要扩展
JTable来实现此功能的可能重复。我很想告诉您,我完全理解您刚才所说的内容,但我几乎不懂。我觉得我必须把我的JTable(tblList)的名字注入到某个地方,但话说回来,你们比我更清楚。不过我很感激你的回答。我会看看我能做些什么来进一步理解它。这里有一个helpful@joppiealiwSwing使用的形式是,这意味着模型与视图分离,您应该能够将模型应用于
JTable
的不同实例(或者将多个模型应用于
JTable
)有趣的是,我尝试了下面的代码,并在调试模式下运行,程序执行了它,但它仍然让列保持可编辑状态。我去检查“祖先模式”。它显示了“return true;”公共类SimpleTableModel扩展了DefaultTableModel{@Override public boolean isCellEditable(int row,int column){return false;}}我很想告诉你,我完全理解你刚才说的话,但我几乎不理解。我觉得我必须把我的JTable(tblList)的名字注入到某个地方,但话说回来,你们比我更清楚。不过我很感激你的回答。我会看看我能做些什么来进一步理解它。这里有一个helpful@joppiealiwSwing使用的形式是,这意味着模型与视图分离,您应该能够将模型应用于
JTable
的不同实例(或者将多个模型应用于
JTable
)有趣的是,我尝试了下面的代码,并在调试模式下运行,程序执行了它,但它仍然让列保持可编辑状态。我去检查“祖先模式”。它显示“return true;”公共类SimpleTableModel扩展了DefaultTableModel{@Override public boolean isCellEditable(int行,int列){return false;}