在主程序中将JFrame输出存储到字符串

问题描述:

在我看来,到目前为止,JFrame中发生的所有事情都保留在JFrame中。 (也许应该得到到JavaFX,而不是摇摆)在主程序中将JFrame输出存储到字符串

比方说,你有一个JFrame类(gui_frame)利用与实现的ActionListener,嵌套类名为HandlerClass Jbutton将如下图所示:

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按钮的名称(在这种情况下,“你好”),后被点击,进入字符串BUTTON_NAME在主类,运行期间时间。

这可能吗?我必须插入到gui_frame的actionPerformed方法中,才能实现这个目的?

+0

*“在我看来,到目前为止,JFrame中发生的所有事情都停留在JFrame中。”*错!这取决于代码。 'JFrame'不像拉斯维加斯。这些代码差异以'public class gui_frame extends JFrame {'**}开头,除非改变其方法的功能,否则不要扩展JFrame **。只需使用一个框架的实例。在其中放置一个按钮,该按钮具有属于'button_name'属性范围内的操作侦听器并更新所执行操作的属性。 *“(可能应该已经进入JavaFX而不是Swing)”*不,最好学习如何编程.. –

+0

..否则使用Java-FX会遇到同样的问题。顺便说一下,一个框架是非模态的,所以''button_name'在到达//插入一些使用button_name的代码时仍然未被初始化。你在这里是“编码魔术”。这从来没有工作。 –

+0

感谢您的模式解释。如果这是个问题,我会尝试从现在开始使用JDialog。 –

有几个方法,你可以这样做:

  1. 实现ActionListener作为主类拉姆达(顺便说一句,应当予以资本化,即“主”),并通过lambda来gui_frame类(同样应该是“GuiFrame”),并且让GuiFrame类将侦听器应用于按钮

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

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

+0

感谢您的建议。将尝试所有人看看哪个更有效。 –