【问题标题】:Updating JTable Data -- using a AbstractTableModel更新 JTable 数据——使用 AbstractTableModel
【发布时间】:2013-07-11 21:54:50
【问题描述】:

我一直在广泛阅读论坛并尝试了多种方法来解决此问题。

问题: 我做了一个自定义AbstractTableModel,这样我就可以控制我的数据的显示方式。它只是存储在String[][] 中。它使用JDBC 连接到数据库以填充初始数据。所以,当我的用户(通过Swing GUI)搜索某个东西时,我在幕后简单地构造一个查询来查询数据库,它返回一个ResultSet。现在,我想在JTable 上显示这个新数据。

研究: 我读了很多关于监听器和触发更新的东西。但是我读了又读了一遍,仍然没有完全理解它们。当我将新模型设置为JTable 时,我实际上想保留我创建的自定义AbstractTableModel 并更新数据,这可能吗(可能使用AbstractTableModel 类中的公共方法可以创建)?

其他问题:我应该为此功能使用监听器吗?我需要添加侦听器或观察者吗?

谢谢,非常感谢! 丰富

【问题讨论】:

    标签: java swing jtable listener abstracttablemodel


    【解决方案1】:

    研究:我阅读了很多关于侦听器和触发更新等的内容。 但是我读了又读了,仍然不完全理解 他们。当我为 JTable 设置新模型时,我实际上想保留我的 我创建的自定义 AbstractTableModel 只是更新数据,是这个 可能的(可能在 AbstractTableModel 类中使用公共方法 我可以创建)?

    是的,这是可能的。基本上,您需要...

    1. 在您的自定义表模型中提供添加和删除行或
    2. 的功能
    3. 使用新数据构造自定义表模型的新实例

    其他问题:我是否应该为此使用监听器 功能?我需要添加侦听器或观察者吗?

    没有上下文很难说。我会说,一般不会。在您的情况下,创建SwingWorker,执行数据库查询并填充新表模型并从doInBackground 方法返回它或使用publish/process 方法更新现有模型可能更简单。

    【讨论】:

    • 非常感谢。您的列表理解了我在处理表格时的两个选项。我搞定了。
    【解决方案2】:

    ....所以我可以控制我的数据的显示方式

    模型用于存储数据。视图 (JTable) 显示数据。

    它只是存储在 String[][] 中。

    无需创建自定义 TableModel。只需使用 DefaultTableModel。

    我实际上想保留我的自定义 AbstractTableModel

    使用 DefaultTableModel 的 setDataVector() 方法

    请参阅Get the Code 部分中的Table From Database Example

    【讨论】:

    • 我想保留我的 AbstractTableModel 的原因是因为我有一排复选框。 DefaultTableModel 不提供此功能。那么你会如何建议我用这个来更新表格行呢?
    • @RichieEpiscopo,是的,您可以在使用 DefaultTableModel 时在 JTable 中显示一行复选框。我再次强调模型存储数据,表格呈现数据。您将布尔值存储在模型中,然后重写 getColumnClass() 方法以返回适当的类,并且表格将使用适当的渲染/编辑器。
    • 感谢您的所有帮助。你还为我澄清了一些事情。我现在开始工作了!
    猜你喜欢
    • 2013-07-20
    • 1970-01-01
    • 2023-03-04
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多