簡體   English   中英

JTextField中的Bean綁定不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM