2010-09-06 44 views
1

我有一個JFrame,當用戶按下按鈕時顯示一個輸入jdialog。我需要jdialog處於非模態模式,並且一旦用戶按下ok, 我想根據輸入做一些操作。現在我在jdialog中傳遞我的視圖作爲參考,這樣當用戶按下ok時,jdialog會調用視圖的方法 。有沒有更加標準化的方法來處理這個問題,或者這是唯一的方法? 我需要的JDialog是在非模態模式在非模態模式下等待jdialog

感謝

回答

1

您可以通過一個java.lang.Runnable要從所謂的JDialog當用戶按下OK按鈕。通過這種方式,您可以將要運行的代碼放入Runnable本身。

+0

這是一個非常好的主意,但我仍然需要在gui組件中通過引用來更新(使用EventQueue的cource)。現在,因爲我回到視圖中,組件可用。有任何想法嗎? – Cratylus 2010-09-06 15:57:32

+0

以及可用於回調的組件的問題是什麼? – 2010-09-06 16:27:04

+0

沒有問題,我是新來的擺動,我不知道它是一種方法或有其他一些分離模式。謝謝您的回覆! – Cratylus 2010-09-06 18:30:01

1

您使用回調的當前方法非常簡單,但observer pattern通常用於減少緊密耦合。兩種實現在Swing是典型的:

  1. 安排您的視圖來實現Observer接口,讓您的輸入窗口委託的Observable一個包含實例。方法notifyObservers()可用於將對象引用傳遞給Observer。可以找到一個非常簡單的例子here

  2. 讓您的輸入窗口保持EventListenerList使用視圖註冊感興趣的自定義事件。聽衆感興趣的數據可以在事件本身中傳遞。重新使用現有的javax.swing.event或對這種類型的自定義事件建模可能很方便。每個JComponent包含一個EventListenerList

+0

這樣,如果打開4個jdialog,JFrame即觀察者將被註冊爲x(例如4)個JDialog。用戶在每個對話框中按下ok,並且在觀察者中始終調用相同的方法。爲了達到這個目的,我應該提供一些關於接下來應該發生什麼類型處理的額外信息?這是處理這個問題的方法嗎?因爲現在,用戶擁有dialogA,當它關閉時,在JFrame中調用methodA,因爲我知道我在代碼中的位置。 – Cratylus 2010-09-06 15:55:21

+0

@ user384706:任何一種方法都允許將信息傳遞給觀察者。我已經詳細闡述過了。 – trashgod 2010-09-06 16:23:06

+0

我只是想知道,如果正確的方式是通過某種例如「doA」信息,並且在觀察者的更新(Observable o,Object arg)方法中,例如if(arg.msg ==「doA 「)callA()else callB()等。我在問,因爲我是gui編程的新手,我正試圖理解正確的方式來完成這些事情。非常感謝你! – Cratylus 2010-09-06 18:33:06