我参加了一个java课程,作为我下一个程序的要求的一部分,我需要一个实例化我的对象的按钮,然后用它执行各种任务。我的问题是,一旦我在actionlistener中创建了我的对象,它接收到按钮的点击,我现在如何使用该对象?
public class Create implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
AdvancedAcmeTaxi taxi = new AdvancedAcmeTaxi(Double.parseDouble(input.getText()));
selection.setEnabled(true);
btnCreate.setEnabled(false);
}
}
所以在上面的代码中我有我的自定义监听器,然后我创建了对象,但由于范围我只能在这里访问它。我该如何解决?请注意,对于本课程的权限,没有控制器。只是模型和视图。这是我的GUI类中的嵌套类。它是由实例化的 btnCreate.addActionListener(new Create());
答案 0 :(得分:1)
您可以将对象定义为类中的成员字段:
public class Create implements ActionListener {
private AdvancedAcmeTaxi taxi;
// getter method for field
public AdvancedAcmeTaxi getTaxi() {
return taxi;
}
public Create() {
...
}
...
@Override
public void actionPerformed(ActionEvent e) {
taxi = new AdvancedAcmeTaxi(Double.parseDouble(input.getText()));;
selection.setEnabled(true);
btnCreate.setEnabled(false);
}
}
添加侦听器后,您可以按如下方式访问该字段:
Create listener = new Create();
btnCreate.addActionListener(listener);
...
AdvancedAcmeTaxi taxi = listener.getTaxi();
答案 1 :(得分:1)
有几种方法可以解决这个问题。一种是获取对主GUI的引用,然后调用一个方法:
public class Create implements ActionListener {
private MainGui mainGui;
public Create(MainGui mainGui) {
this.mainGui = mainGui;
}
@Override
public void actionPerformed(ActionEvent e) {
AdvancedAcmeTaxi taxi = new AdvancedAcmeTaxi(Double.parseDouble(input.getText()));;
selection.setEnabled(true);
btnCreate.setEnabled(false);
mainGui.setTaxi(taxi);
}
}
当你调用它的构造函数时,你必须将Current MainGui的引用传递给这个类,这将假设MainGui有一些方法可以处理你的Taxi实例(这里我称之为{{1} })。
另一种方法是让您的 Control 类(上面的Create类)修改程序的 Model 对象。视图(GUI)将有监听器进入模型,并在模型更改时更改其显示。这称为MVC或模型 - 视图 - 控制设计模式,它可以非常有用,可以让您分离您的顾虑。