请帮帮我。我在以下代码中遇到了麻烦。这对我来说有点混乱,但对你来说很容易。我希望你能找到解决方案。
class AddressBookInterface {
JTextField txt = new JTextField();
}
class AddressBook {
AddressBookInterface obj;
String input = obj.txt.getName(); //this code, generate an error..........
}
在“AddressBookInterface”类中,我创建了一个文本字段。在“AddressBook”类中,我想从用户那里获得一些输入,哪个用户输入在“AddressBookInterface”类中创建的文本字段。
答案 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模型的经验。我希望这正是你要找的。 p>
答案 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());