2016-08-23 31 views
2

形勢訪問一個JFrame的深一個POJO

我在多窗口環境中的以下情況中的上下文:

Main application -> JFrame 1 -> Swing Components -> Pojo 1 
       -> JFrame 2 -> Swing Components -> Pojo 2 
       -> JFrame 3 -> Swing Components -> Pojo 3 
       -> ... 

每個JFrame中有一定的上下文信息,即G。框架ID。這些框架是從同一個應用程序中創建的。

問題

是否有某種方式(或模式),我可以從POJO類訪問Jframe的上下文信息,而不必通過部件的整個產業鏈遞過去?而不必交出電子郵件。 G。一個揮杆組件和使用e。 G。 SwingUtilities.getRoot()?

我當然不能使用靜態變量。 ThreadLocal可能有幫助,但這很棘手,你不能在e中實例化Pojo。 G。一個ActionListener。也許有人有更好的主意(除了改變框架實例的概念)

+1

1.爲什麼上下文存儲在視圖組件上,而不是存儲在後端/模型類的某處? 2.在某個時候,Pojo被添加到框架中。沒有選項可以將必要的上下文信息或指針傳遞給Pojo類嗎? – Robin

+0

簡單示例:JFrame將當前時區存儲爲數據,每個框架都有不同的時區。每個JFrame內的面板可以根據用戶的決定而有所不同。所以常見的地方是框架,它與時區保持着一些數據結構。作爲一個非常基本的例子,我有一個日曆,其中有一個pojo,無論出於何種原因都需要時區。當然,我可以讓日曆從框架中選擇時區,然後交給它。但最終可能會出現一連串的組件和對象,因此訪問幀數據的更直接的方法會更好。 – Roland

回答

0

我認爲最簡潔的設計是將所需的上下文信息封裝到單個根類中(這可以像你喜歡的那樣簡單或複雜,例如Properties對象,單個定製bean,完整模型包)和然後通過這個鏈傳遞下來。鏈中的每個擺動組件都需要是javax.swing類的子類,以便允許包含上下文信息參數的構造函數。鏈中每個類中的額外字段和額外構造函數參數的開銷最小。

另一種方法是平滑鏈條,使JFrame類負責創建其整個佈局。它會自己創建Pojo對象(加上它們之間的所有組件),從而能夠輕鬆地傳入所需的上下文信息。