假设我有一个List
Items
(我自己创建的有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
。
关于如何做到这一点的任何建议?
答案 0 :(得分:3)
但是,如果我想这样做,以便Object不存储在AbstractTableModel
中
Object应始终存储在TableModel中。您可以在外部创建Object,但是您需要将Object添加到TableModel。一旦Object成为模型的一部分,您应该只通过TableModel方法对其进行操作。
请参阅Row Table Model以获取一个TableModel,它允许您在模型中存储对象,但允许您根据需要将数据检索为完整的对象。
您需要扩展该类以实现自己的getValueAt()
和setValueAt()
方法。这些方法将访问对象的各个属性。 JButtonTableModel.java示例显示了如何执行此操作。
答案 1 :(得分:1)
选项1:
DefaultTableModel
的构造函数,您将在JTable中使用它选项2:
getValueAt()
,就像您描述的那样如果数据没有变化,选项1可以很简单。选项2是最灵活的,但你似乎有一个没有解释的对象。
答案 2 :(得分: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);
希望它对您有用