在一个类中创建的表单对象,并在另一个类中获取其引用/引用

时间:2013-09-15 06:50:11

标签: java swing

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

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

    }

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

3 个答案:

答案 0 :(得分:0)

obj为null,您需要初始化它。否则你会得到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();    
    }

}

答案 1 :(得分: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模型的经验。我希望这正是你要找的。

答案 2 :(得分: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());