如何禁用JTable中的特定单元格?

时间:2015-05-25 10:11:28

标签: java swing jtable tablecelleditor defaulttablemodel

我正在使用swing。我有一个JTable有8列和动态行。 第二列是不可编辑的,我在DefaultTableModel中这样做了。

static JComboBox combo1 = new javax.swing.JComboBox(new String[]{"Static","Project Variable", "External", "Output Variable"});
            ParametersTable.setModel(new     javax.swing.table.DefaultTableModel(
            parametersTableData,
            new String[]{
                "S.No", "Parameters", "Parameter Type", "Static Value", "Variable Name", "Sheet Name", "Column Name", "Output Variable"
            }
            ) { 
Class[] types = new Class[]{
                    java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class
                };

                public Class getColumnClass(int columnIndex) {
                    return types[columnIndex];
                }

                boolean[] canEdit = new boolean[]{
                    true, false, true, true, true, true, true, true 
                };

                public boolean isCellEditable(int rowIndex, int columnIndex) {
                    return canEdit[columnIndex];
                }
            }       
            );
            ParametersTable.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(combo1));

我在第3列中有JComboBox,其值为static,project variable,external,output variable

假设有2行,那么当我在第一行选择参数类型为static时,我希望在该特定行和其余单元格中启用特定cell(静态值)被禁用 同样,当我选择参数类型为"输出变量"在第二排。我希望在该特定行中启用该特定单元格(输出变量),并禁用其余单元格。

1 个答案:

答案 0 :(得分:3)

按如下方式更改isCellEditable

public boolean isCellEditable(int rowIndex, int columnIndex) {
    String comboValue = ParametersTable.getValueAt(rowIndex, 0).toString(); //0 is the column index where your combo box value available.
    if(comboValue.equals("static")){
        return false; //The cell (row, column) will be non editable
    }
    return canEdit[columnIndex];
}