1

假设我有一个ListItems我自己创建的有 5 个字段的类)。我想以某种方式将这些项目注入JTable.
JTable我想要有某种方法,比如public String determineColumnText(Object o, int col)我可以将接收Object到的转换为Item然后基于col从 Item 中取出特定值并返回它以便显示。

我试过搜索并看到很多答案说创建AbstractTableModel但是我看过的所有教程都没有提供我想要的任何东西。然而,我看到的最接近的是public Object getValueAt(int rowIndex, int columnIndex),这意味着我必须将所有要显示的对象存储在AbstractTableModel. 但是如果我想让它Object不存储在里面AbstractTableModel但同时可以发送到AbstractTableModel.

关于如何执行此操作的任何建议?

4

3 回答 3

3

但是,如果我想让 Object 不存储在 AbstractTableModel 中怎么办?

对象应始终存储在 TableModel 中。您可以在外部创建对象,但您需要将对象添加到 TableModel。一旦对象成为模型的一部分,您就应该只通过 TableModel 方法对其进行操作。

请参阅行表模型以获取 TableModel,它允许您将对象存储在模型中,但如果您愿意,您可以将数据作为完整对象检索。

您将需要扩展该类以实现您自己的方法getValueAt()setValueAt()方法。这些方法将访问您的对象的各个属性。JButtonTableModel.java 示例展示了如何做到这一点。

于 2013-10-31T15:02:47.697 回答
1

选项1:

  • 循环浏览您的项目列表。
  • 为所有单元格构建数据数组
  • 将该数组传递给 aDefaultTableModel的构造函数,您将在 JTable 中使用该构造函数

选项 2:

  • 扩展 DefaultTableModel 和 override getValueAt(),就像你描述的那样
  • 在表模型中存储对列表的引用

如果数据没有变化,选项 1 可能很简单。选项 2 是最灵活的,但您似乎有一个未解释的对象。

于 2013-10-31T15:02:37.433 回答
0

我将向您粘贴我是如何使用 AbstractTableModel 填充表格的。

public class InventoryModel extends AbstractTableModel {

private static final String[] columnNames = { "Owner", "Location", "Sample Name", "Form Factor" };
private List<Samples> samplesList;

public InventoryModel(){
    samplesList = SampleQueries.getAvailableSamples();

}

@Override
public int getColumnCount() {
    // TODO Auto-generated method stub
    return columnNames.length;
}

@Override
public int getRowCount() {
    return samplesList.size();
}

@Override
public String getColumnName(int column) {
    return columnNames[column];
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    switch (columnIndex) {
    case 0:
        return samplesList.get(rowIndex).getCurrentOwner();
    case 1:
        return samplesList.get(rowIndex).getSampleLocation();
    case 2:
        return samplesList.get(rowIndex).getSampleName();
    case 3:
        return samplesList.get(rowIndex).getFormFactor();
    }
    return null;
}   

这就是我在小组中的称呼。

    table = new JTable();
    model = new InventoryModel();
    model.fireTableDataChanged();
    panel.setLayout(new BorderLayout(0, 0));
    table.setModel(model);

    JScrollPane scroll = new JScrollPane(table);
    panel.add(scroll);

希望它对你有用

于 2013-10-31T15:04:01.363 回答