[英]Making a JTABLE column uneditable
我将我的JTable命名为tblList,我希望某个列不可编辑。 我发现下面的代码应该可以完成这项工作,但是我一生无法使它在现有表上正常工作。 我想我的问题尤其是,如何调用以下代码在名为tblList的现有表上进行设置?
JTable model = new JTable(){
@Override
public boolean isCellEditable(int row, int column){
return column==3 false;
};
};
这样做的方法是拥有自己的TableModel
并重写public boolean isCellEditable(int rowIndex, int columnIndex);
。 根据经验,我们不应覆盖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());
请在下面找到一个有效的示例(这不是我通常编写代码的方式,您也不应仅举一个示例):
static class Table extends JFrame {
public Table() {
String[] columns = new String[] {
"Id", "Name", "Hourly Rate", "Part Time"
};
//actual data for the table in a 2d array
Object[][] data = new Object[][] {
{1, "John", 40.0, false },
{2, "Rambo", 70.0, false },
{3, "Zorro", 60.0, true },
};
TableModel m = new AbstractTableModel() {
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex][columnIndex];
}
@Override
public int getRowCount() {
return data.length;
}
@Override
public int getColumnCount() {
return data[0].length;
}
@Override
public boolean isCellEditable (int row, int col) {
return false;
}
};
//create table with data
JTable table = new JTable(m);
//add the table to the frame
this.add(new JScrollPane(table));
this.pack();
this.setVisible(true);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.