2016-05-17 82 views
0

我有一个扩展JFrame的gui类MyGUIClass。我想在java中完成以下任务。我看着EventQueue,但不知何故无法做正确的事情。我甚至不确定这是否是正确的方法。使JFrame GUI等待,然后按下按钮后继续

在主,我想事件的顺序如下:

- >启动的JFrame

- >保持JFrame的活跃,等到播放按钮被按下。当按下按钮时,执行main中的其余代码,但保持gui活动以接收来自JFrame的命令。

  try { 
       java.awt.EventQueue.invokeAndWait(new Runnable() { 
        public void run() { 
         new MyGUIClass().setVisible(true); 
        } 
       }); 
      } 
      catch (Exception e) { 
       e.printStackTrace(); 
      } 

      System.out.println("Portion to execute only after request from GUI"); 
      } 

但是,上述审判不起作用,并且在GUI没有任何推荐的情况下,println打印。

+1

请发布您的可运行示例,以便我们可以运行它并查看出了什么问题。你也应该阅读[Swing中的并发](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/) –

+0

@SergiyMedvynskyy谢谢你的评论。上面的代码定义了Runnable。你想让我发布MyGUIClass()吗? – user2178841

+0

我希望看到一个**短**(约50行代码)可编译和可运行的示例或[SSCCE](http://sscce.org),它可以说明您的问题。 –

回答

2

你将不得不提供一个监听器,点击你想要执行的代码。

但是,如果你想把你想要执行的代码在。你需要包含代码或lambda等一些匿名类

我在这里告诉你如何实现你想要

class MyGUIClass extends JFrame { 
    ... 
    // I am using Runnable to contain code you want to execute. 
    // You can use Function or any class/interface you want 
    Runnable codeToExecute; 
    MyGUIClass(Runnable codeToExecute){ 
     this.codeToExecute = codeToExecute; 
     ... 
    } 

    ... 
    void yourGUImethod(){ 
     ... 
     JButton btn = new JButton(new AbstractAction(){ 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       codeToExecute.run(); // execute code on button press 
      } 
     }); 
     yourPanel.add(btn);    // Add this button to your panel 
     ... 
    } 

现在,您可以从主

Runnable codeToExecute =() -> {  // Using lambda 
    System.out.println("Portion to execute only after request from GUI"); 
} 

java.awt.EventQueue.invokeAndWait(new Runnable() { 
    public void run() { 
     new MyGUIClass(codeToExecute).setVisible(true); 
    } 
});  
2
提供执行的代码是什么

我甚至不确定这是否是正确的方法。

那么你还没有声明,如果这是主窗口或子窗口。

如果这是一个“子窗口”,并且您在主窗口提示信息,那么您应该使用模态JDialog作为子窗口。

如果这是“主窗口”,那么不是它不是正确的方法。

图形用户界面是事件驱动的。这意味着你编写代码来响应事件。

所以,当创建框架时,创建所有组件并将它们添加到框架中。

对于“播放”按钮,您需要将ActionListener添加到按钮。所以当按下按钮时,你会调用与播放操作相关的代码。

然后,GUI将只是坐在那里等待用户生成更多事件。

+0

它是一个主窗口。感谢您的评论。 – user2178841

+0

@ user2178841,问题解决了吗? – camickr

相关问题