【问题标题】:How to disable cell editing of a Jtable displayed from a result set如何禁用从结果集中显示的 Jtable 的单元格编辑
【发布时间】:2014-08-20 02:48:59
【问题描述】:

大家好,我在显示表格后尝试禁用表格编辑时遇到问题。我会使用 setEnabled 但我仍然希望表格是可点击的,因为我在文本字段的帮助下显示和编辑其行的内容。

我已经搜索并得到了我必须覆盖 isCellEditable() 或使用 DefaultTableModel 的提示。但是,现在的主要问题是我的表是使用 rs2xml 显示的,因为我实际上是在将数据库表的内容加载到 JTable 中。这是我的代码段,它显示结果集中的表格:

         do {
                //get the table...
                attendanceTable.setModel(DbUtils.resultSetToTableModel(
            } while (rs2.next());

rs2 是我的结果集。

我尝试使用默认表模型...我尝试过这样的事情:

          do {                  
             DefaultTableModel myTable = (DefaultTableModel)attendanceTable.getModel();
              myTable.setModel(DbUtils.resultSetToTableModel(rs2));
             } while (rs2.next());

但给了我错误,因为 defaultTableModel 下没有 setModel 方法。这就是我使用 defaultTableModel 所理解的......

关于覆盖 isCellEditable(),有人问过类似的问题(但没有使用 rs2xml 显示表格)提到这样做也使他的程序无法编辑表格。

请大家帮我解决这个问题...提前致谢

【问题讨论】:

    标签: java sql swing jtable resultset


    【解决方案1】:

    我已经搜索并得到了我必须覆盖 isCellEditable() 的提示

    好建议。

    但是,现在的主要问题是我的表是使用 rs2xml 显示的,因为我实际上是在将数据库表的内容加载到 JTable 中

    为什么会有这样的问题?您可以覆盖 JTable 的isCellEditable(...) 方法。

    另外,为什么你的代码有一个do...while 循环?您只需为 JTable 创建一个 TableModel。 DBUtils 代码将循环读取 ResultSet 中的所有数据并创建 TableModel。

    【讨论】:

    • 感谢先生关于 do...while 循环的提示。现在创建 isCellEditable() 方法时,最好在 DefaultTableModel 下创建还是直接在 table 下创建。我见过两个这样的例子。但我现在的问题是我的表和它周围的所有 gui 组件都是用 netbeans 创建的,我猜我无法编辑初始化代码。
    • @spynoble,你为什么要谈论 DefaultTableModel?您正在使用 DBUtils,它会返回一个 TableModel,因此您不能覆盖它的任何方法。我不使用 IDE,所以我不能建议您如何在 Netbeans 中扩展一个类,尽管我确信这在 IDE 中是可能的,否则 IDE 不会很有用。我的建议是不要使用 IDE。而是自己创建 GUI 代码,然后使用 IDE 来调试代码。花时间学习 Java,而不是 IDE。
    • 抱歉先生,我可以编辑初始化代码,因此qualTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Qualifications", "Year attained" } ) { }; @ Override public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } }); 但问题仍然存在。所以我有一种感觉,每当我使用 DbUtils 的东西时,它都会覆盖我在 JTable 上使用过的任何设置。请问先生有什么提示吗?
    • 所以这意味着我必须接受 DBUtils 给我的任何东西?
    • 如果您想使用 DBUtils,那么您可以使用该方法返回的 TableModel。但正如我已经说过的,您可以覆盖 JTable 的 isCellEditable(..) 方法。或者您不必使用 DBUtils,您可以自己将数据直接加载到 DefaultTableModel 中。请参阅Table From Database 中的TableFromDatabaseExample.java 代码,了解如何完成此操作的简单示例。
    【解决方案2】:

    ...在显示表格后尝试禁用对表格的编辑。我会使用 setEnabled 但我仍然希望表格是可点击的,因为我在文本字段的帮助下显示和编辑其行的内容。

    覆盖isCellEditable() 不应禁用单击单元格或选择单元格。它只是防止单元格被编辑。

    我已经搜索并得到了我必须覆盖 isCellEditable() 或使用 DefaultTableModel 的提示。但是,现在的主要问题是我的表是使用 rs2xml 显示的,因为我实际上是将数据库表的内容加载到 JTable 中。

    这应该与您是否可以覆盖和禁用编辑无关。

    这是我的代码段,它显示结果集中的表格:...

    片段没有多大帮助。请发布minimal code example program,不需要数据库。

    我尝试使用默认表模型...我尝试过这样的事情:

    这段代码对我来说毫无意义,主要是因为您正在创建一个 DefaultTableModel 对象,然后立即忽略它——为什么?那么您使用的是 DbUtils 类,我们不知道因此无法帮助您。

    关于覆盖 isCellEditable(),有人问过类似的问题(但没有使用 rs2xml 显示表格)提到这样做也使他的程序无法编辑表格。

    这就是我能提供的所有帮助,除了将您引导到教程并要求更多更好的信息和代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-07
      • 2012-05-29
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 2013-06-04
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多