从Objects的ArrayList创建JTable – Java

如何在JTable中显示“Click”对象?

ArrayList myClicks = new ArrayList(); Click click = new Click(620, 1028); Click click2 = new Click(480, 230); myClicks.add(click); myClicks.add(click2); 

它应该看起来像这样:

 |---Mouse X---|---Mouse Y---| | 620 | 1028 | | 480 | 230 | 

哪个真的……

  | | vv click.getX() click.getY() click2.getX() click2.getY() 

我不想使用2D Object [] []因为将它们作为Click对象尽可能长时间更有意义。

我知道我可能需要扩展TableModel接口,但我不确定如何。

我想要一个快速而简单的例子(java文档有点令人困惑)。

您可以使用DefaultTableModel ,但在您的情况下,这意味着您需要转换数据以确认其需要,更好地定义支持您数据模型的模型…这有点重点

以下示例使用AbstractTableModel ,因为它使您可以控制备份数据,但负责管理大部分内容(注册和触发事件)。

这个例子不可变。 也就是说,您无法添加或删除新点击或更改现有点击。 这并不困难,你应该阅读如何使用表格了解更多细节

在此处输入图像描述

 import java.awt.EventQueue; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.table.AbstractTableModel; public class ClickTable { public static void main(String[] args) { new ClickTable(); } public ClickTable() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { ex.printStackTrace(); } List clicks = new ArrayList<>(25); clicks.add(new Click(620, 1028)); clicks.add(new Click(480, 230)); ClickTableModel model = new ClickTableModel(clicks); JTable table = new JTable(model); JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new JScrollPane(table)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class Click { private int x; private int y; public Click(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public int getY() { return y; } } public class ClickTableModel extends AbstractTableModel { private List clicks; public ClickTableModel(List clicks) { this.clicks = new ArrayList<>(clicks); } @Override public int getRowCount() { return clicks.size(); } @Override public int getColumnCount() { return 2; } @Override public String getColumnName(int column) { String name = "??"; switch (column) { case 0: name = "Mouse X"; break; case 1: name = "Mouse Y"; break; } return name; } @Override public Class getColumnClass(int columnIndex) { Class type = String.class; switch (columnIndex) { case 0: case 1: type = Integer.class; break; } return type; } @Override public Object getValueAt(int rowIndex, int columnIndex) { Click click = clicks.get(rowIndex); Object value = null; switch (columnIndex) { case 0: value = click.getX(); break; case 1: value = click.getY(); break; } return value; } } } 

尽可能将它们保持为Click对象更有意义。

当您想要在表格中显示其他自定义对象时,可能还有其他情况。 行表模型为对象的ArrayList提供通用支持。 它为添加和删除等动态function提供支持。

JButtonTableModel.java给出了实现Object的完整模型所需的代码示例。