簡體   English   中英

Java Swing架構問題?

[英]Java Swing architecture problem?

到目前為止,我已經開發了簡單的swing應用程序,因此無需將GUI代碼分解為diff。 類,但由於此應用程序將非常大,因此我決定將代碼拆分為diff。 類,以使代碼更易於管理。

但是在繼續之前,我心中有以下疑問:

GUI的簡要說明

它將有一個主JFrame(MainFrame)。 設置一個JPanel(MainJPanel),其布局將為CardLayout。 它將包含25張卡(每張卡都是JPanel形式,其中包含自己的揮桿組件)。

Q1。 我決定進行25節課(每節課需要一張JPanel卡)。 這是正確的方法嗎?

Q2。 如果以上答案正確,那么我該如何編寫這些卡(25張卡)上按鈕的xxxxActionPerformed()方法的代碼,因為這些方法需要訪問MainJPanel的對象

例如

public void buttonActionPerformed(ActionEvent evt) {
    java.awt.CardLayout c = (java.awt.CardLayout) mainJPanel.getLayout();
    c.show(mainJPanel, "card1");  // card1 is this card
    mainJPanel.updateUI();
}

我用谷歌搜索了swing示例,但是幾乎所有示例都顯示了diff的用法。 擺動組件。 您能否也建議我一個鏈接,該鏈接顯示了一些diff示例中包含GUI代碼的示例。 類。

Q1)聽起來很多課程。 雖然每個類都有可能具有不同的功能,但我發現您更有可能將其中一些組合成更常見的類。 例如,您可以簡單地使用ColorCard(其中Color是參數)來代替YellowCard和BlueCard。

Q2)Model View Presenter(MVP)和Model View Controller(MVC)是兩種(或一種,取決於您的視圖)常見的設計模式,這些模式可幫助設計GUI,以便每個人都能獲得所需的數據。

更具體地說,您可能不需要所有卡都具有對父面板的引用。 例如,如果您有一個允許用戶訂購漢堡的BurgerPanel和一個顯示已訂購多少漢堡的StatusPanel,則可以按以下方式在它們之間進行通信...

創建一個StoreStatus對象,並將其傳遞給BurgerPanel和StatusPanel。 當用戶訂購帶有漢堡面板的漢堡時,它將更新商店狀態。 存儲狀態通過觀察者模式將此更新通知StatusPanel,然后StatusPanel反映更改。

更新:關於您的特定示例,您可以對父類進行某種引用,也可以使用觀察者模式將其更新通知給它。 (觀察者模式的優點是,對父類的任何更改都不能在子類中創建更改。)

我會說您為每張卡創建一個類都是正確的。 這是拆分代碼的邏輯方法。

如果您需要引用MainJPanel,則只需將其傳遞到每個卡類的構造函數中並保留對其的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM