Java swing UI实现,很可能涉及PropertyChangeListener

时间:2012-03-15 15:12:20

标签: java swing user-interface jtable propertychangelistener


我的用例如下 -
我有一个对象列表(ArrayList),自定义数据对象 现在我想将每个数据对象显示或表示为包含3个按钮的Box。所以我会在列表中为n提供n个给定数据对象的框。

我希望将每个“盒子”堆叠在一个,例如JTable

现在,每当数据对象被添加到上述列表中时,我希望如前所述创建另一个Box并添加到JTable中。

我知道这可以使用PropertyChangeListener完成,但我在网上浏览了一些关于PropertyChangeListener的文章,但是无法获得明确的可实现的想法。

我是建立用户界面的新手,对此有任何帮助将非常感激。

1 个答案:

答案 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);
  }
}