2011-12-09 105 views
0

如果我要製作一個單窗口Java程序,我發現自己正在做類似下面的事情。請注意,我傾向於像iOS開發那樣做很多事情。從Java中分離邏輯設計

+-------------------------------------------------------------------------------+ 
|                    | 
|  ExampleJFrame.java    ExampleJPanel.java      | 
|    |        |        | 
| ExampleJFrameController.java -> ExampleJPanelController.java -> Component(s) | 
|                    | 
+-------------------------------------------------------------------------------+ 

我喜歡iOS標準的方式,並希望遵循這一點。這是我能得到的最接近的。我的問題是如果我正在做簡單的東西,如JFrame,如添加JPanel,設置標題,位置,大小等,我應該(1)子類JFrame哪裏,我只會有ExampleJFrame,並有對象做上述事情本身或(2)我應該只有ExampleJFrameController這將創建一個新的JFrame並設置它的標題和什麼?

編輯

選擇第二個選項,如果我想繼承ExampleJFrameController,父對象將設置JFrame的知名度true之後的子對象可以用它做任何事情。所以也許我忘了添加一個選項3(這在某種程度上是由「圖形」隱含的):既有ExampleJFrame也有ExampleJFrameControllerExampleJFrame would set its own size and location and title and ExampleJFrameController would set its visibility. Then lies a problem: if ExampleJFrame should know about ExampleJPanel and ExampleJFrameController should know about ExampleJPanelController , how would I connect the ExampleJPanelController to its ExampleJPanel`?或者我錯過了一些可以解決這個問題的細節?

回答

2

我會使用第二個選項。將Java代碼分離到目前爲止可能看起來非常漂亮整潔,但在設計Java對象時變得太​​複雜了。你最終有幾十個文件,可以很容易地完成3或4.

如果你第一個選項去了,每次你想創建一個新的JFrame,你最終會創建一個新的控制器。使用第二個選項,您可以在現有控制器類中添加一個新對象。

+2

在這種情況下繼承JFrame的方式也是不好的OOP風格,而不是在內部使用JFrame基本上與擴展Thread的人相同的問題而不是實現Runnable – Voo

+0

如果你需要控制如果你需要從另一個控制一個'JFrame',那麼你需要上面的另一個控制器類(至少要保持這個類的''JFrame'')你想要的結構) – Jon

+0

我的評論太大了看看我的編輯。 –

2

我認爲選項2是最好的,因爲你可以更容易地管理它。此外,您可以創建新的控制器,而無需創建全新的JFrame。這樣可以保留內存,並且可以使程序的功能更加高效。

+0

基本上和喬恩說的一樣:( – Matt

+0

打敗你幾秒鐘,但我意識到我錯過了你的答案,謝謝。 – Jon

+0

當我的是20秒​​前,你的是在「剛纔」 但是什麼ev,他會相信你的更多 – Matt