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