【问题标题】:Storing JFrame output into a String in the Main Program在主程序中将 JFrame 输出存储到字符串中
【发布时间】: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


【解决方案1】:

有几种方法可以做到这一点:

  1. 在主类中将 ActionListener 实现为 lambda(顺便说一句,应该大写,即“Main”),并将 lambda 传递给 gui_frame 类(同样,应该是“GuiFrame”),并且让 GuiFrame 类将侦听器应用到按钮

  2. 为 GuiFrame 类创建一个接口,用于通知 Main 类该按钮已被单击(以及按钮的名称)。让 Main 类实现该接口,然后将 Main 的实例传递给 GuiFrame 类。然后让 GuiFrame 的 ActionListener 调用 Main 类接口中的方法通知它。

  3. 将最后点击按钮的名称存储在 GuiFrame 类中,并让 Main 类在需要时请求它(如果它不需要知道按钮何时被点击)。

【讨论】:

  • 感谢您的建议。将尝试所有这些,看看哪个更有效。
猜你喜欢
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 2011-01-30
相关资源
最近更新 更多