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

Java swing UI实现,很可能涉及PropertyChangeListener,java,swing,user-interface,jtable,propertychangelistener,Java,Swing,User Interface,Jtable,Propertychangelistener,我的用例如下-- 我有一个对象、自定义数据对象的列表(ArrayList)。 现在,我想将这些数据对象显示或表示为一个包含3个按钮的框。因此,我会在列表中为给定的数据对象设置n框 我希望这些“盒子”中的每一个都堆放在一个,比如说,JTable 现在,每当一个数据对象被添加到上述列表中时,我都希望像前面提到的那样创建另一个框并添加到JTable中。 我知道这可以通过使用PropertyChangeListener来实现,但是我在网上浏览了一些关于PropertyChangeListener的文章,


我的用例如下--
我有一个对象、自定义数据对象的列表(ArrayList)。
现在,我想将这些数据对象显示或表示为一个包含3个按钮的框。因此,我会在列表中为给定的数据对象设置
n

我希望这些“盒子”中的每一个都堆放在一个,比如说,
JTable

现在,每当一个数据对象被添加到上述列表中时,我都希望像前面提到的那样创建另一个框并添加到JTable中。

我知道这可以通过使用PropertyChangeListener来实现,但是我在网上浏览了一些关于PropertyChangeListener的文章,但是没有得到一个清晰的可实现的想法


我对构建UI还不熟悉,如果有任何帮助,我将不胜感激。

我建议将您的
数组列表
包装在
表格模型
实现中,这样对列表的修改将触发
表格模型事件

在下面的示例中,基础列表封装在模型实现中;修改它的唯一方法是调用
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);
  }
}
公共类MyTableModel扩展了AbstractTableModel{
私有最终列表项=新的ArrayList();
public int getRowCount(){
返回items.size();
}
public int getColumnCount(){
返回3;
}
公共字符串getColumnName(int columnIndex){
开关(列索引){
案例0:
返回“foo”;
案例1:
返回“bar”;
案例2:
返回“qux”;
违约:
断言false:“无效列索引:”+columnIndex;
}
}
公共无效附加项(MyItem){
项目。添加(项目);
fireTableRowsInserted(items.size()-1,items.size()-1);
}
}

“非常感谢您的帮助”如果您不去想“sigs”这样的噪音,我们将不胜感激。顺便说一句,你有问题吗?如果是,那是什么?可能一切都取决于JComponent的类型保持活动对象如果我正确理解问题,您将为给定的数据对象设置
n
按钮。此外,您如何看待从列表到表的映射?为什么不坚持使用
JList
。您不应该在
PropertyChangeListener
s上搜索,而应该在
TableModel
ListModel
上搜索,这是表/列表后面的模型,更新此模型将更新视图侧以及n个框而不是按钮。我已经改正了那个错误。