使JTABLE列不可编辑

时间:2016-04-12 10:39:52

标签: java swing jtable

我命名了我的JTable tblList,我希望某个列不可编辑。我发现下面的代码应该可以完成这项工作,但我不能为我的生活让它在我现有的表上工作。我想我的问题特别是,如何调用以下代码在我现有的名为tblList的表上设置?

JTable model = new JTable(){

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

1 个答案:

答案 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);
        }
    }