我的用例如下 -
我有一个对象列表(ArrayList),自定义数据对象
现在我想将每个数据对象显示或表示为包含3个按钮的Box。所以我会在列表中为n
提供n
个给定数据对象的框。
我希望将每个“盒子”堆叠在一个,例如JTable
。
现在,每当数据对象被添加到上述列表中时,我希望如前所述创建另一个Box并添加到JTable中。
我知道这可以使用PropertyChangeListener完成,但我在网上浏览了一些关于PropertyChangeListener的文章,但是无法获得明确的可实现的想法。
我是建立用户界面的新手,对此有任何帮助将非常感激。
答案 0 :(得分:2)
我建议将ArrayList
包裹在TableModel
实施中,对列表进行修改会触发TableModelEvent
。
在下面的示例中,基础List被封装在模型实现中;修改它的唯一方法是调用addItem
,在修改列表后调用fireTableRowsInserted
。这将导致TableModelEvent
被触发,然后由JTable视图处理到此模型实例上。
public class MyTableModel extends AbstractTableModel {
private final List<MyItem> items = new ArrayList<MyItem>();
public int getRowCount() {
return items.size();
}
public int getColumnCount() {
return 3;
}
public String getColumnName(int columnIndex) {
switch(columnIndex) {
case 0:
return "foo";
case 1:
return "bar";
case 2:
return "qux";
default:
assert false : "Invalid column index: " + columnIndex;
}
}
public void addItem(MyItem item) {
items.add(item);
fireTableRowsInserted(items.size() - 1, items.size() - 1);
}
}