2016-05-17 90 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

相關問題