从对象的 ArrayList 创建 JTable - Java
Posted
技术标签:
【中文标题】从对象的 ArrayList 创建 JTable - Java【英文标题】:Create JTable from ArrayList of Objects - Java 【发布时间】:2013-09-26 12:16:19 【问题描述】:如何在 JTable 中显示“单击”对象?
ArrayList<Click> myClicks = new ArrayList<Click>();
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 |
真的是……
| |
v v
click.getX() click.getY()
click2.getX() click2.getY()
我不想使用 2D Object[][],因为尽可能长时间地将它们保留为 Click 对象更有意义。
我知道我可能必须扩展 TableModel 接口,但我不确定如何。
我想要一个快速简单的例子(java 文档有点混乱)。
【问题讨论】:
Java 文档有什么特别令人困惑的地方?也许我们可以启发你。 @JoshM 我已经花了几个小时在上面,文档非常适合非常简单的应用程序。它没有解释如何将表链接到复杂对象的 arrayList。我现在开悟了。 【参考方案1】:您可以使用DefaultTableModel
,但在您的情况下,这意味着您需要转换您的数据以确认它的需求,最好定义一个支持您的数据模型的模型......这就是重点
以下示例使用AbstractTableModel
,因为它使您可以控制支持数据,但会负责大部分内务管理(注册和触发事件)。
这个例子是不可变的。也就是说,您无法添加或删除新点击或更改现有点击。这并不难,您应该阅读How to use tables了解更多详情
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<Click> 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<Click> clicks;
public ClickTableModel(List<Click> 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;
【讨论】:
【参考方案2】:将它们尽可能长时间地保留为 Click 对象更有意义。
当您还想在表格中显示其他自定义对象时,可能还会有其他情况。 Row Table Model 为对象的 ArrayList 提供通用支持。它为添加和删除等动态功能提供支持。
JButtonTableModel.java
给出了实现对象的完整模型所需的代码示例。
【讨论】:
以上是关于从对象的 ArrayList 创建 JTable - Java的主要内容,如果未能解决你的问题,请参考以下文章