2011-09-06 75 views
4

我在我的一個類中創建了一個方法給我的Java應用程序,該應用程序創建了一個Swing GUI並擁有自己的動作偵聽器 - 這很好。但是,當窗口關閉時,我需要該方法返回一個String[]數組;這是導致問題的部分...在一個方法內使用ActionListeners創建一個GUI

我在該方法的末尾添加了一個簡單的return語句,但顯然Java不會等待動作偵聽器,並且認爲該方法一旦完成動作偵聽器已被添加。那麼有什麼辦法可以「hold」一個方法,然後當我準備好時恢復它 - 甚至是我的問題的一個不同的解決方案?

由於提前

+1

嗨,安迪,你可以發佈你的代碼?它可能會讓我們更好地瞭解你想要做什麼? –

+0

如果我正確地理解了你,你不想在這裏「持有」一種方法,而是持有*狀態*。然後,正如其他人在下面的良好答案中所述,請在WindowListener中獲取此狀態。 –

+0

我會盡力重申。我真正需要做的就是停止方法返回(即完成),直到調用一個動作偵聽器來填充要返回的數組! – Andy

回答

4

改爲使用模態JDialogJOptionPane。打開它的代碼將暫停 - 直到模態組件從屏幕上消失。

+1

不要忘記用'setModal(true);' – Neifen

+0

@Neifen + 1設置JDialog模式,但我更願意在[構造函數]中指定模態(http://download.oracle.com/javase/7/ docs/api/javax/swing/JDialog.html#constructor_summary)。如果只是因爲它少了一行代碼。 ;) –

+0

@Andrew Thompson:非常抱歉,延遲迴復,並非常感謝您的答覆。模態JDialog正是我所需要的... – Andy

3

嘗試用WindowListener所以,當你關閉該窗口,您可以將您的陣列

爲例:

public class YourClass{ 
    ... 
    window.addWindowListener(new NameOfListener()); 
    ... 

    class NameOfListener() extends WindowAdapter{ 
     @Override 
     public void windowClosed(final WindowEvent e) 
     { 
      // send your array 
      anInstanceYouWish.setArrayXY(yourStringArray); 
     } 
    } 
} 
+0

對不起,答覆緩慢,謝謝你的回答。不幸的是,由於幾個原因,您的解決方案對我無效。 1)這是一種創建GUI而不是類的方法,2)我有一個Window Listener,但每當我嘗試使用它返回數組時,我的IDE只是告訴我將返回類型從'void' ,因此return語句實際上並不適用於父方法。 – Andy

+1

1)你如何在你的方法中創建Gui? 2)一個Listener不能有一個return語句。所以你必須在你需要陣列的地方製作一套方法。 – Neifen

+0

我像在正常情況下一樣在方法中創建GUI:使用一些JComponents創建JPanel,添加動作偵聽器,並將JPanel設置爲JFrame中的內容窗格!儘管如此,我認爲你並沒有正確理解我的情況。假設我有一個名爲「Return」的按鈕,並附加了一個動作監聽器。我只想返回數組,並在按下該按鈕時完成方法... – Andy

2

您可以將WindowListener添加到JFrame實例並覆蓋windowClosing(WindowEvent e)方法。在這裏,你可以實現你自己的行爲。

+1

頂級容器不僅用於JFrame +1 – mKorbel

+0

@mKorbel +1,我做了一個假設,但你是對的 - 這適用於所有頂級容器。 – mre

+0

有什麼更好的WindowsClosing或WindowsClosed? – Neifen

相關問題