java - 使 JTABLE 列不可编辑

标签 java swing jtable

我将 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/

相关文章:

java - 如何获取我的注释的参数作为 validator ?

java - 如何使用基于注释的配置代替基于 XML 的配置

Java 删除/添加 JPanel

java - 如何获取 JScrollPane 中的组件

java - 我得到 [Ljava.lang.Object;@ 而不是 JTable 上的数据

java - 为排序的字符串列表创建测试用例

java - 如何将我自己的 .class 文件导入到 RingoJS 应用程序中?

java - JScrollPane 自动换行

java - JApplet 将启动但未初始化

java - 如何使jtable中的一行不可选择?