在JTable中使一列不可编辑

7
我使用Netbeans创建了一个MasterDetail Simple Form,并且有一个与数据库相关的JTable。
我想编辑这个JTable中的一列,使其不可编辑。
我在Google上搜索到以下内容:
this.masterTable.getColumn("Validation").setEditable(false);

这对我没有用!


可能是重复的问题:Java JTable - Make only one column editable - Line
6个回答

12

覆盖 TableModel 的 isCellEditable(...) 方法。

DefaultTableModel model = new DefaultTableModel(...)
{
    @Override 
    public boolean isCellEditable(int row, int column)
    {
        // add your code here
    }
}

JTable table = new JTable( model );

我无法覆盖isCellEditable(...)方法,因为我的对象直接扩展了JTable类。 - Azer Rtyu
我已经使用了它,但我的单元格仍然可编辑。我在isCellEditable中编写了return column == 4,但表中的所有单元格仍然可编辑。为什么? - mautrok
@mautrok,我刚刚编辑了代码。有一个错别字。该类应该返回“boolean”,而不是“Boolean”。也许这就是问题所在。如果不是的话,我无法帮助,因为我猜不出你的代码长什么样子。如果你需要更多的帮助,请提出一个问题,并发布一个适当的SSCCE来演示问题。 - camickr

6

禁用 JTable 上多个列的用户编辑

JTable table = new JTable(10, 4) {
    @Override
    public boolean isCellEditable(int row, int column) {
        return column == 3 || column==4 || column==5 ? true : false;
    }
};

4

我使用GUI找到了解决方案:

  • 右键单击表格单元格。
  • 从弹出菜单中选择“表格内容..”。
  • 取消所需列的可编辑复选框以使其成为只读。

enter image description here


6
不要使用“GUI编辑器”来构建用户界面,因为你无法学到太多东西。相反,自己编写代码。 - Amarnath
@Amarnath 为什么要重复造轮子呢? - user10146018

2

如果您直接扩展JTable,则可以使用以下解决方案:(将此代码放置在构造函数中)

DefaultTableModel tableModel = new DefaultTableModel(data, colNames){

        @Override
        public boolean isCellEditable(int row, int column)
        {
            // make read only fields except column 0,13,14
            return column == 0 || column == 13 || column == 14;
        }
    };

this.setModel(tableModel);


1
isCellEditable()

这里是Javadoc: isCellEditable(int, int) 是你需要的方法。如果你正在使用TableModel,则可以在该JTable实例的TableModel子类中覆盖此方法。


我不知道如何使用它。 - Azer Rtyu

0
如果jtable的名称为wordListJTable:
        String colTitles[] = {"#", "Word", "Definiton"};
        boolean[] isEditable = {false,true,true};
        wordTableModel = new DefaultTableModel(colTitles, 0) {
            @Override
            public boolean isCellEditable(int row, int column) {
                // make read only fields except column 0,13,14
                return isEditable[column];
            }
        };
        // The 0 argument is number rows. 
        wordListJTable.setModel(wordTableModel);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接