2016-04-02 119 views
1

我有這個GUI應用程序,並且我想在用戶打開應用程序時但在顯示GUI後立即執行自定義操作。如何在顯示JFrame後執行某些操作

於是,我把電話給行動統一到JFrame的public Main()這樣的:

public Main() { 
    initComponents(); 
    ExecuteAfter(); 
} 

哪裏ExecuteAfter()是包含acction的方法,或執行行動。

這工作正常,但不是我想要的方式。這樣,在JFrame顯示之前,即在應用程序窗口出現在屏幕之前,該操作始終執行。我想要的只是在顯示JFrame之後執行操作,即在屏幕上出現應用程序窗口之後。

我試過把電話撥入public static void main(String args[]),因爲這裏有JFrame被創建和顯示。但不起作用,因爲該方法不是靜態的,而且我也不能放置靜態方法,因爲它使用了已被IDE初始化爲非靜態的JFrame的一些組件。

那麼,問題是:我需要在屏幕上顯示JFrame後才能執行調用動作的地方?或者還有其他的方式呢?

在此先感謝!

+0

你有沒有考慮嘗試使用'WindowListener'?查看[如何編寫窗口監聽器](https://docs.oracle.com/javase/tutorial/uiswing/events/windowlistener.html)以獲取更多詳細信息。或者,您可以將調用包裝在一個'SwingUtilities.invokeLater'調用中。我可能會試着做 – MadProgrammer

+0

@MadProgrammer謝謝!這解決了問題。我使用了一個'WindowListener'並且工作完美! – FiroKun

回答

1

我用了WindowListener並解決了這個問題。

而不是在構造函數public Main()或在主要public static void main(String args[])這是不能完成的呼叫,我配置WindowsListener做呼叫。像這樣:

private void formWindowOpened(java.awt.event.WindowEvent evt) { 
    ExecuteAfter(); 
} 

並且以我想要的方式完美地工作。

感謝@MadProgrammer提示。

0

如果我理解你的問題,我爲我的項目使用類似的情況。我需要在JFrame展示時啓動計時器,所以我就是這麼做的。

所以我使用2個方法和1個構造函數。第一種方法(exp。名稱:prepare GUI),在這裏你可以添加所有的想法來創建JFrame,JPanel ....以及我在構造函數中調用的那個方法。在第二種方法(exp。Name:start GUI)中,您將所有組件添加到JPanel/s,將JPanel/s添加到JFrame,並將JFrame設置爲visible =(true),然後添加您的方法ExecuteAfter()。第二種方法(準備GUI)需要在主要方法中調用。我希望這會幫助你。

+0

我正在工作的IDE會自動創建一個構造函數,我在問題'Main Main()'中引用,其中「Main」是可以是任何名稱的'JFrame'的名稱;以及調用構造函數並顯示窗口的'main',正確的''public static void main(String args [])'。問題是我不能在'main'上調用任何函數,因爲它是'static',並且調用不會出於我在問題中解釋的原因。 – FiroKun

+0

我已經用'WindowListener' @MadProgrammer答案解決了這個問題。謝謝! – FiroKun

相關問題