我遵循演示模型模式来编码一些屏幕。
- 我把一些豆子储存在一个
ArrayList
- 我将在一个列表中显示该列表的内容
JTable
,感谢一个AbstractTableModel
- 我也想展示some组合框中此列表中的记录(以表单形式)和其他一些在 JList 中,同时
- 这三个屏幕(及其模型)彼此独立
如何管理在我的列表中添加{一个或多个}/删除{一个或多个}并在任何地方“实时”查看更改?
我即将编写自己的 ObservableList 或围绕 EventDispatcher 实现它......你觉得怎么样?
PS:
- 我知道在 C# 中
BindingList
对于这个目的有帮助,那么 Java 呢?
- 我已经能够显示每个 bean 的更新,感谢
PropertyChangeSupport
.
让你AbstractTableModel
实施ListModel,这两者都可以使用JComboBox and
J列表。您可以根据需要将方法转发到默认模型实现。
附录:SharedModelDemo, 中提到如何使用表格,是一个可以帮助您入门的示例。它extends DefaultListModel implements TableModel
,虽然你应该这样做extends AbstractTableModel implements ListModel
附录:作为参考,这里是最小实现和三个测试实例的概述。我使用了默认的组合和列表实现,但如果需要,您可以使用相应的抽象实现。
public class SharedModel extends AbstractTableModel
implements ComboBoxModel, ListModel {
private ComboBoxModel comboModel = new DefaultComboBoxModel();
private ListModel listModel = new DefaultListModel();
//ComboBoxModel
@Override
public void setSelectedItem(Object anItem) {
comboModel.setSelectedItem(anItem);
}
@Override
public Object getSelectedItem() {
return comboModel.getSelectedItem();
}
// ListModel
@Override
public int getSize() {
return listModel.getSize();
}
@Override
public Object getElementAt(int index) {
return listModel.getElementAt(index);
}
@Override
public void addListDataListener(ListDataListener l) {
listModel.addListDataListener(l);
}
@Override
public void removeListDataListener(ListDataListener l) {
listModel.removeListDataListener(l);
}
// TableModel
@Override
public int getRowCount() {
return 0;
}
@Override
public int getColumnCount() {
return 0;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return null;
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
SharedModel sm = new SharedModel();
JTable table = new JTable(sm);
JList list = new JList(sm);
JComboBox check = new JComboBox(sm);
}
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)