我命名了我的JTable tblList,我希望某个列不可编辑。我发现下面的代码应该可以完成这项工作,但我不能为我的生活让它在我现有的表上工作。我想我的问题特别是,如何调用以下代码在我现有的名为tblList的表上设置?
JTable model = new JTable(){
@Override
public boolean isCellEditable(int row, int column){
return column==3 false;
};
};
答案 0 :(得分:2)
这样做的方法是拥有自己的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);
}
}