【发布时间】:2018-12-25 23:11:23
【问题描述】:
我是 Java 新手,也是 StackOverflow 的新手,如果我做错了什么,请见谅。我马上改正!
我的问题是:如何将实现ActionListener 的类中的变量返回到另一个类的变量中?
实现ActionListener的类不是内部类。
我自愿省略了导入。
这里是一个例子:
File_A.java
public class Gui extends JFrame {
private JButton myButton;
private String path;
some other properties...
public Gui () {
myButton = new JButton("Some Text");
myButton.AddActionListener(new Pick_Something());
}
}
File_B.java
public class Pick_Something implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser selectElement = new JFileChooser();
String path;
int status = selectElement.showOpenDialog(null);
if (status == JFileChooser.APPROVE_OPTION)
path = selectElement.getSelectedFile().getAbsolutePath();
else
path = null;
}
}
如何在File_A.java 的path 变量中返回File_B.java 的path 变量?
我尝试编写一个返回它的方法,但该方法没有出现在所有方法的列表中,因此无法调用。我还尝试使用Gui 扩展Pick_Something 并使path 受保护,但我有一个StackOverflowError。
有人看到我做错了什么或知道该怎么做吗?
【问题讨论】:
-
您不能从
void方法返回值(正如您所发现的那样),这不是事件驱动编程的工作方式。您要么需要某种回调机制,要么使用模态对话框,例如 JOptionPane 或模态 JDialog。请查看我在this similar question 中的回答。 -
另外,如果 PickSomething 引用了可视化的 Gui 对象,它可能会向该对象“推送”一个值,但这会导致紧密耦合,因此不是最佳设计。
-
请阅读 Java 命名约定并避免使用“_”下划线字符。
-
您想将动作侦听器定义为不是内部类的原因是什么?
-
我已经发布了两种替代方法的答案。它们在某种程度上有助于回答您的问题吗?
标签: java swing actionlistener inner-classes