Java jTable 来自 ArrayList 对象的数据并通过其他方法更新

标签 java swing user-interface jtable

我是 Java GUI 新手,正在尝试在 SWING 中使用 jTable。我目前有一个按照 Oracle 教程制作的,它通过以下方式获取表数据:

Object[][] data = {
    {"Kathy", "Smith",
     "Snowboarding", new Integer(5), new Boolean(false)},
    {"John", "Doe",
     "Rowing", new Integer(3), new Boolean(true)},
    {"Sue", "Black",
     "Knitting", new Integer(2), new Boolean(false)},
    {"Jane", "White",
     "Speed reading", new Integer(20), new Boolean(true)},
    {"Joe", "Brown",
     "Pool", new Integer(10), new Boolean(false)}
};

我有一个名为 Orders 的对象,它有一个 ArrayList (productsInOrder),其中包含无限数量的 Project 对象。我试图让表格显示 ArrayList 中每个对象的以下每个内容。 productsInOrder.getPrice() productsInOrder.getSKU() productsInOrder.getName()

有人能指出我正确的方向吗?或者将我链接到一个可以提供帮助的教程,因为我查遍了整个互联网,但无法弄清楚这一点。

最后,我在其他地方有一个操作监听器,当用户执行某些操作时,它会向 ArrayList 添加更多 Product 对象。我将如何更新 jTable?只需在操作监听器中重新加载整个 jTable 即可,或者有没有办法简单地向表中添加另一行?

最佳答案

Or link me to a tutorial that can help

您阅读的教程应该会对您有所帮助。

基本解决方案是创建自定义 TableModel。在示例中,它们将数据存储在二维数组中。在您的情况下,数据将存储在 ArrayList 中。因此,您需要修改 getVALueAt() 方法来访问 ArrayList 而不是 2D 数组。

Finally, I have elsewhere I have an action listener which adds more Product objects to the ArrayList when the user performs certain actions.

您的代码应该更新 TableModel,而不是 ArrayList。然后表模型会通知表。这意味着您需要在自定义 TableModel 中实现 addRow(...) 方法。

对于更复杂的解决方案,您可以创建一个可以使用的通用表模型。请参阅Bean Table Model有关此方法的示例。 JButtonTableModel 示例代码展示了如何进一步自定义 BeanTableModel,仅针对您感兴趣的属性。

关于Java jTable 来自 ArrayList 对象的数据并通过其他方法更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601996/

相关文章:

java - 如何在 Mac OS X 上的 Eclipse 中使用 Java Swing?

java - JFrame 重绘后不刷新

python - __init__ 在 GUI 中与 tkinter

php - HTML - 格式化垂直表格

architecture - 面向对象 : Can an interface implement another interface?

java - Smack 无需聊天即可发送和接收消息

java - 将文件utf8转换为utf16 java

java - 如何在 JTextArea 中编写内容并在不按任何按钮的情况下显示它

java - 为什么我的 ByteBuddy 拦截器没有被调用?

java - xpath 只返回一个结果