Déb*_*ora 6 java swing beans-binding
我试图绑定JList到绑定类属性,Vector.在绑定类中,在Vector更新JTextFieldUI时更新.
public void setName(String name) {
String oldName = this.name;
this.name = name;
Vector oldList=this.list;
list.add(name);
propertySupport.firePropertyChange("name", oldName, this.name); //textField updates
propertySupport.firePropertyChange(PROP_LIST, oldList, list); // JList
}
Run Code Online (Sandbox Code Playgroud)
另外另一个单独的setter可用于更新Vector.我也设置了添加/删除PropertyChangeListeners.
我真正的要求是JList根据BeanBinding课堂上的数据更新.例如,当用户输入时JTextField,应该将来自数据库的相关数据和类中的现有变量加载到JList.
请任何人告诉我如何绑定NetBeans中的数据BeanBinding类(源)属性JList.至少任何教程链接.NetBeans站点中有一个示例,但它用于直接从数据库获取数据.
不了解 Netbeans,只是简单的编码:-) 将您的列表包装到 ObservableList 中,并对可观察的进行所有更改应该可以工作。这是一个可运行的代码(抱歉,篇幅较长,现在没有精力将其删除)
public class SimpleListBinding {
@SuppressWarnings("unused")
private static final Logger LOG = Logger
.getLogger(SimpleListBinding.class.getName());
private JComponent content;
private JList list;
private JTextField textField;
private List<MyBean> beanList;
private JButton modifyButton;
private JButton addButton;
/**
* Binds list and simple properties.
*/
private void bindBasics() {
BindingGroupBean context = new BindingGroupBean();
JListBinding listBinding = SwingBindings.createJListBinding(UpdateStrategy.READ_WRITE,
beanList, list);
listBinding.setDetailBinding(BeanProperty.create("value"));
context.addBinding(listBinding);
context.addBinding(Bindings.createAutoBinding(UpdateStrategy.READ_WRITE,
list, BeanProperty.create("selectedElement.value"),
textField, BeanProperty.create("text")));
context.bind();
Action action = new AbstractAction("programatically change") {
public void actionPerformed(ActionEvent e) {
int selectedBean = list.getSelectedIndex();
if (selectedBean < 0) return;
MyBean bean = beanList.get(selectedBean);
bean.setValue(bean.getValue() + "*");
}
};
modifyButton.setAction(action);
Action add = new AbstractAction("add bean") {
int count = 0;
@Override
public void actionPerformed(ActionEvent e) {
beanList.add(new MyBean("added: " + count++));
}
};
addButton.setAction(add);
}
private void initData() {
MyBean[] beans = new MyBean[] {
new MyBean("first"), new MyBean("second"), new MyBean("third")
};
beanList = ObservableCollections.observableList(new ArrayList(Arrays.asList(beans)));
}
public static class MyBean extends AbstractBean {
private String value;
private boolean active;
public MyBean(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
Object old = getValue();
this.value = value;
firePropertyChange("value", old, getValue());
}
public void setActive(boolean active) {
boolean old = getActive();
this.active = active;
firePropertyChange("active", old, getActive());
}
public boolean getActive() {
return active;
}
}
private JComponent getContent() {
if (content == null) {
initComponents();
content = build();
initData();
bindBasics();
}
return content;
}
private JComponent build() {
JComponent comp = Box.createVerticalBox();
comp.add(new JScrollPane(list));
comp.add(textField, BorderLayout.SOUTH);
comp.add(modifyButton);
comp.add(addButton);
return comp;
}
private void initComponents() {
list = new JList();
textField = new JTextField();
modifyButton = new JButton("modify programmtically");
addButton = new JButton();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
final JXFrame frame = new JXFrame("List binding", true);
frame.add(new SimpleListBinding().getContent());
frame.pack();
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:用 JList 替换 JXList (行为没有区别,只是为了使其可编译:-)
| 归档时间: |
|
| 查看次数: |
3333 次 |
| 最近记录: |