【问题标题】:Make a column non-editable in a JTable在 JTable 中使列不可编辑
【发布时间】:2013-05-28 20:57:46
【问题描述】:

我使用Netbeans 创建了一个MasterDetail Simple Form,并且我有一个与数据库相关的JTable

我想编辑此JTable 中的一列,使其不可编辑。

我在谷歌上搜索了一下,我能找到的只有这些:

this.masterTable.getColumn("Validation").setEditable(false);

这对我不起作用!

【问题讨论】:

标签: java swing netbeans jtable tablecolumn


【解决方案1】:

在 JTable 上禁用用户对多列的编辑

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

【讨论】:

    【解决方案2】:

    覆盖 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 类。
    • 我用过但是我的单元格还是可以编辑的,我在isCellEditable里面写了return column==4但是表格中的所有单元格还是可以编辑的,为什么?
    • @mautrok 我刚刚编辑了代码。有一个错字。该类应返回“布尔”而不是“布尔”。也许这就是问题所在。如果不是,我将无能为力,因为我无法猜测您的代码是什么样的。如果您需要更多帮助,请提出问题并发布正确的 SSCCE 来证明问题。
    【解决方案3】:

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

    • 右键单击表格单元格。
    • 从弹出菜单中选择“表格内容..”。
    • 取消选中要设置的列的可编辑复选框 不可编辑。

    【讨论】:

    • 不要使用GUI Editors 进行 UI 构建,您无法学到很多东西。而是自己编写代码。
    • @Amarnath 为什么要重新发明轮子?
    【解决方案4】:

    如果你直接扩展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);

    【讨论】:

      【解决方案5】:
      isCellEditable()
      

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

      【讨论】:

      • 不知道怎么用。
      【解决方案6】:

      如果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);
      

      【讨论】:

        猜你喜欢
        • 2017-01-17
        • 2010-12-31
        • 2015-11-14
        • 2013-08-10
        • 1970-01-01
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 2015-03-17
        相关资源
        最近更新 更多