Java ActionListener获取';s的默认值
我正在用Java实现一个简单的应用程序。我正在为应用程序使用MVC模块。问题是,当我的Java ActionListener获取';s的默认值,java,swing,model-view-controller,initialization,Java,Swing,Model View Controller,Initialization,我正在用Java实现一个简单的应用程序。我正在为应用程序使用MVC模块。问题是,当我的控制器创建视图和模型的对象时,当尝试使用简单的get方法时,我会得到默认值,而不是插入到UI中的新值。以下是代码exmaple: 视图: 控制器: public class Controller implements ActionListener { private float result; private Server server = new Server(); private
控制器
创建视图
和模型
的对象时,当尝试使用简单的get方法时,我会得到默认值,而不是插入到UI中的新值。以下是代码exmaple:
视图:
控制器:
public class Controller implements ActionListener {
private float result;
private Server server = new Server();
private Client client = new Client(this);
public Controller() {
server.rateParser();
client.startUI(this);
}
public void actionPerformed(ActionEvent e) {
result = client.getAmmount();
}
}
主要内容:
但是,到目前为止还不错,当我点击按钮并触发动作事件时,
getamount
方法返回-1,这是默认值。客户机
类中的所有getter也是如此。有人知道为什么会这样吗 您正在初始化2个客户端
第一次在main的调用中
Controller controller = new Controller();
初始化类时,其所有成员也将初始化。由于客户端
是控制器的成员
:
public class Controller implements ActionListener {
private Client client = new Client(this); // 1st initialization
}
它通过newcontroller()
调用初始化
第二次是构造函数中的调用
public Controller() {
server.rateParser();
client.startUI(this); // <---- here
}
由于
actionPerformed
位于Controller
内部,因此在result=client.getamount()中调用的是其字段client
代码>。在程序的整个生命周期中,它保持不变,因此返回默认值(在初始化时创建)。但是,您显示的客户机是第二个客户机,frame
,您为其调用frame.setVisible(true)代码>。该选项已被修改,但其值从未被读取。请考虑提供一个说明问题的选项。这不是一个代码转储,而是您正在做的一个示例,它突出了您所遇到的问题。这将减少混乱和更好的响应您正在使用客户机(CurrencyParser,ActionListener)
构造函数实例化客户机实例,但您的代码片段显示客户机(ActionListener)
构造函数。这可能是原因吗?对不起,忘记删除那段代码了。现在已修复。请更正标题。
public class Controller implements ActionListener {
private Client client = new Client(this); // 1st initialization
}
public Controller() {
server.rateParser();
client.startUI(this); // <---- here
}
public void startUI(ActionListener listener) {
Client frame = new Client(listener); // 2nd initialization
frame.setVisible(true);
}