-1

请帮我。我在以下代码中遇到了麻烦。这对我来说有点混乱,但对你来说很容易。我希望你能找到解决方案。

  class AddressBookInterface {
       JTextField txt = new JTextField();
  }
  class AddressBook {
      AddressBookInterface obj;
      String input = obj.txt.getName();     //this code, generate an error..........

    }

在“AddressBookInterface”类中,我创建了一个文本字段。在“AddressBook”类中,我想从用户那里获得一些输入,用户在“AddressBookInterface”类中创建的文本字段中输入。

4

3 回答 3

0

要获得用户输入,您必须使用getText()而不是getName()。要获得用户输入,您可以采用观察者模式的方法。

AddressBook创建一个观察者来监听来自文本字段的变化 AddressBookInterface

然后您的代码将如下所示。

class AddressBookInterface {
       JTextField txt = new JTextField();

     public void registerListener(String name, PropertyCHangeListener listener){
             txt.addPropertyChangeListener(name,listener);
     }       

 }

  class AddressBook {
      String input;
      private PropertyChangeListener listener = new MyPropertyChangeListener();


      public PropertyChangeListener getListener(){
            return listener;
      }

      private class MyPropertyChangeListener implements PropertyChangeListener{
             @Override
             public void propertyChange(PropertyChangeEvent evt){
                        if(evt == null)
                             return;

                     if(evt.getPropertyName().equals("text")){
                         input = (String) evt.getNewValue();
                     }
             }

       }

} 

在您创建对象的某个地方。

   AddresBookInterface addres = new AddresBookInterface();
   AddresBook book = new AddresBook();
   addres.registerListener("text",book.getListener()); 
于 2013-09-15T07:14:07.543 回答
0

问题很简单。AddressBookInterface obj 没有实例化,也就是说,obj 里面什么都没有,要求一个空对象给你 name 的值,当然会出错。在这种情况下,请尝试以下代码。

public class AddressBookInterface{
    JTextField txt;
    public AddressBookInterface(){
        // constructor
        // do something initial task here
        txt = new JTextField();
    }

    // Create this method so that you can reference from other class
    public String getName(){
        return txt.getText();
    }       
}

在包含模型和控制器的主类中。初始化接口类,你可以通过以下方式获取值。

// initial the interface
    AddressBookInterface interfaceObj = new AddressBookInterface();

    // get the value 
    String name = interfaceObj.getName();

我没有设计 MVC 模型的经验。我希望这是你正在寻找的。

于 2013-09-15T07:08:56.613 回答
0

obj为空,你需要初始化它。否则你会得到NullPointerException

class AddressBook {
    AddressBookInterface obj = new AddressBookInterface();
    String input = obj.txt.getName();    
}

边注:

IMO,你应该在实例块中进行初始化,像这样

class AddressBook {
    AddressBookInterface obj;
    String input;    

    {
        obj = new AddressBookInterface();
        input = obj.txt.getName();    
    }

}
于 2013-09-15T07:00:57.067 回答