[英]Beans Binding in JTextField doesn't work
我嘗試使用Java中的bean綁定。 我在某些站點中遵循了代碼。 並試圖使其工作。
在這里,我所做的是嘗試在運行時使用用戶在文本字段中輸入的值來更新Person的名字。 但是,當我單擊按鈕時,它包含“ omg”。 如果我將其替換為“”,它將包含該值。 正如我所提到的,它看起來只能工作一次。 它出什么問題了? 我在這里想念什么? 誰能幫助解決這個問題?
我交換了源和目標,並嘗試了
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public abstract class AbstractModelObject {
private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
public void addPropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
public void removePropertyChangeListener(String propertyName,
PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyName,
listener);
}
protected void firePropertyChange(String propertyName, Object oldValue,
Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue,
newValue);
}
}
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class PersonImpl extends AbstractModelObject implements Person{
private String firstName;
private String lastName;
public PersonImpl()
{
}
public PersonImpl(String firstName)
{
this.firstName = firstName;
}
public String getFirstName()
{
System.out.println("getFirstName");
return firstName;
}
public void setFirstName(String firstName)
{
System.out.println("setFirstName");
String old = this.firstName;
this.firstName = firstName;
firePropertyChange("firstName",old,firstName);
}
}
public interface Person {
void setFirstName(String string);
String getFirstName();
}
public class MyFrame extends JFrame {
JTextField field = new JTextField("omg");
JButton button = new JButton("Save");
Person p = new PersonImpl();
MyFrame()
{
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("first name : " + p.getFirstName());
}
});
}
private void initDataBinding() {
if(Beans.isDesignTime()){return;}
BeanProperty<Person, String> fNameProperty =
BeanProperty.create("firstName");
BeanProperty<JTextField, String> textProperty =
BeanProperty.create("text");
BindingGroup bindingGroup = new BindingGroup();
AutoBinding<JTextField, String, Person, String> firstNameBinding
= Bindings.createAutoBinding(UpdateStrategy.READ, field, textProperty,p, fNameProperty);
firstNameBinding.bind();
}
}
通常,這種綁定將使用READWRITE創建。 這似乎不是問題的根源,但可以考慮更改。
這里要檢查的第一件事是在綁定create調用上放置一個斷點,並確保它實際上已被調用。
如果是這樣,請在調用.bind()之前考慮添加綁定偵聽器,並查看它是否報告任何失敗的綁定操作。 這應該可以幫助您快速找到問題所在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.