繁体   English   中英

使JTABLE列不可编辑

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM