【发布时间】:2017-03-31 18:53:53
【问题描述】:
在我看来,到目前为止,在 JFrame 中发生的一切都在 JFrame 中。 (可能应该进入 JavaFX 而不是 Swing)
假设您有一个使用 JButtons 的 JFrame 类 (gui_frame),其中一个名为 HandlerClass 的嵌套类实现了 ActionListener,如下所示:
public class gui_frame extends JFrame {
private JButton button1;
public gui_frame() {
super("Title");
setLayout(new FlowLayout());
button1 = new JButton("Hello");
add(button1);
HandlerClass handler = new HandlerClass();
button1.addActionListener(handler);
}
private class HandlerClass implements ActionListener{
public void actionPerformed(ActionEvent e){
//insert code here
}
}
}
然后你就有了调用这个 gui_frame 类的主代码。
public class main {
public static void main(String[] args){
//insert some unrelated code here
gui_frame gf = new gui_frame();
gf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gf.setSize(400,75);
gf.setVisible(true);
String button_name;
//insert some code that uses button_name
}
}
基本上,我试图在运行时将 JFrame 类 gui_frame(在本例中为“Hello”)中的按钮名称存储到主类中的 String button_name 中,。
这可能吗?为了实现这一点,我必须在 gui_frame 的 actionPerformed 方法中插入什么?
【问题讨论】:
-
“在我看来,到目前为止,在 JFrame 中发生的一切都在 JFrame 中。” 错误!这取决于代码。
JFrame不像拉斯维加斯。这些代码差异以public class gui_frame extends JFrame {开头不要扩展JFrame,除非更改 其方法的功能。只需使用框架的一个实例。在其中放置一个按钮,该按钮具有在button_name属性范围内的操作侦听器并更新执行操作的属性。 “(可能应该进入 JavaFX 而不是 Swing)” 不,最好学习如何编程.. -
.. 否则,您在使用 Java-FX 时会遇到同样多的麻烦。顺便说一句,一个框架是非模态的,所以当达到
//insert some code that uses button_name时,button_name仍然是未初始化的。您在这里是“魔术编码”。那永远行不通。 -
感谢模态解释。如果这是一个问题,我将从现在开始尝试使用 JDialog。
标签: java swing jframe actionlistener