import javax.swing.*; 
import javax.swing.table.*; public class MainFrame extends JFrame {     private Object[][] data = { {"内容", "必选"}, {"内容", "可选"} 
    };     private String[] columnNames = {"内容", "选择性"};     private TableModel tableModel = new DefaultTableModel(data, columnNames) {         public boolean isCellEditable(int row, int column) { 
            boolean fal = false;             TableModel model = tableModel; 
            int count = model.getRowCount();             for (int i = 0; i < count; i++) { 
                String checked = (String) model.getValueAt(i, 0); 
                             if (checked.equals("必选")) { 
                    if (row == i) { 
                        fal = true; 
                    } else { 
                        fal = false; 
                    }                 } else { 
                    fal = false; 
                }             } 
            return fal; 
        }     }; 
    private JTable tblEmp = new JTable(tableModel); 
    private JPanel contentPane;     public MainFrame() { 
        super("不可编辑的表格"); 
        setSize(400, 300); 
        // 
        contentPane = (JPanel) getContentPane(); 
        JScrollPane pnlMain = new JScrollPane(tblEmp); 
        contentPane.add(pnlMain); 
    }     public static void main(String[] args) { 
        MainFrame f = new MainFrame(); 
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        f.setLocationRelativeTo(null); 
        f.setVisible(true); 
    } 

代码如上: 
上次提问问题说错了··我的问题是····
当选择性为必选的时候··那么那一行都不允许编辑·····
有人给我了这么一段代码
public boolean isCellEditable(int row, int column) {
        TableModel model = tableModel;
        if (model.getValueAt(row, column).equals("张三")) {
            return false;
        }
            return true;
        }
可是这样只实现了固定的单元格不可编辑····实现的是:当选择性为“必选”的时候··那一行都不允许编辑·····

解决方案 »

  1.   

    你的实现写错了。
    没必要用循环的在isCellEditable里。
    这样修改下,仅供参考: private TableModel tableModel = new DefaultTableModel(data, columnNames)
    {
    public boolean isCellEditable(int row, int column)
    {
    TableModel model = tableModel; if (column == 0)
    {
    String checked = (String) model.getValueAt(row, column + 1);
    if (checked.equals("bixuan"))
    {
    return false;
    }
    return true;
    }
    return false;
    } };
      

  2.   

    if (column == 0)
    请问这一句是什么意思···谢谢···
      

  3.   

    哦。
    我觉得 第二列 可选行都不能改变。
    如果可选行原来是 可选, 但是被你手动改成必选了。
    这样就麻烦了。
    你可以自己想想,该怎么改。
    if (column == 0) 就是对 第一列进行控制。
    其他列默认不可修改。
      

  4.   

    恩···看到了··谢谢··我还有一个问题··
    Object[][] cells = { {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE, 
    "可选", 
    "", ""}, {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE, 
    "可选", "", ""}, {Boolean.FALSE, "必选", "", ""}, 
    {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE, "必选", "", 
    ""}, {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE, "必选", 
    "", ""}, {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE, 
    "必选", "", ""}, {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE, "必选", "", 
    ""}, {Boolean.FALSE, "可选", "", ""}, {Boolean.FALSE, "可选", "", ""}, }; 
    String[] columnNames = { "选择", "重要级", "文件名", "说明", "" ,""}; // 获得升级MOdule并添加到JTable 
    // Object[][] getSetModule=objgetResponse.getModule(); 
    // String[] 
    // moduleName={"ID","name","seleect","depend","release","note"}; 
    DefaultTableModel model = new DefaultTableModel(cells, columnNames) {   public boolean isCellEditable(int row, int column) 
            { 
                TableModel model = jTable1.getModel();             if (column == 0) 
                { 
                    String checked = (String) model.getValueAt(row, column + 1); 
                    if (checked.equals("必选")) 
                    { 
                        return false; 
                    } 
                    return true; 
                } 
                return false; 
            } 
    public Class getColumnClass(int columnIndex) { 
    return columnIndex == 0 ? Boolean.class : String.class; 

    }; 
    ActionListener listener = new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
    int mode = 0; 

    }; jTable1 = new JTable(model); /** 
    * 获得用户选择项目 
    */ 
    jTable1.getModel().addTableModelListener(new TableModelListener() { 
    public void tableChanged(TableModelEvent e) { 
                    
    String getModule = ""; 
    String getValue = ""; TableModel model = jTable1.getModel(); 
    int count = model.getRowCount(); 
    for (int i = 0; i < count; i++) { 
    Boolean checked = (Boolean) model.getValueAt(i, 0); 
    if (checked.equals(Boolean.TRUE)) { 
    getModule = getModule + "" + String.valueOf(i) + ","; 
    getValue = getValue + "" 
    + (String) model.getValueAt(i, 1) + ","; 


    getAllModule = getValue; 
    System.out.println(""+getValue); } 
    }); 
    我的表格样式是这样的··· 
    都是Boolean类型的··· 
    我想当选择了其中一个的时候···其余的都不可以在编辑了··
    请问应该怎么实现啊···
      

  5.   

    自己想想啊。
    都差不多的吧。
    无非就是在方法里对着 row 和 col 进行分析啊。
    你的代码到处是中文,
    也没编辑,看得我眼花缭乱