我将 JTable 命名为 tblList,并且希望某个列不可编辑。我发现下面的代码应该可以完成这项工作,但是,我一生都无法让它在我现有的 table 上工作。我想我的问题特别是,如何调用以下代码在名为 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 的作用 - 将调用委托(delegate)给数据模型:
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);
}
}
关于java - 使 JTABLE 列不可编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36570832/