簡體   English   中英

用於擺動GUI編程的Java類體系結構

[英]Java Class Architecture for swing GUI programming

我正在編寫一個需要大量擺動GUI組件的應用程序。 我在組織課程時遇到很多麻煩。 有沒有一種方法可以組織和整潔地布置課堂架構?

我發現我的構造函數令人困惑,它包含許多正在初始化的組件,然后是幾個事件處理程序。

另外,我有許多匿名和內部類,我的主類變得腫了。 但是,當我將內部類事件處理程序放在單獨的文件中時,在訪問主類的組件時會遇到麻煩。 是否有內部組織大型swingGUI應用程序的方法?

在較大的swing項目中,我會像這樣划分應用程序:

  • 每個GUI元素(如JPanel,JDialog等)都有一個類。

  • 為每個屏幕使用單獨的程序包,尤其是在必須實現自定義TableModel或其他復雜數據結構的情況下

  • 不要使用匿名類和內部類,而應實現ActionListener並在其中檢查ActionEvent.getActionCommand()。

如果將大量的GUI組件布置在單獨的面板中,然后將這些面板放置在框架中,則可以對內部面板的創建進行方法化,以使代碼更易於理解:

public MyApp() {
    JPanel mainPanel = new JPanel(new BorderLayout());
    JPanel north = createNorthPanel();
    mainPanel.add(north, BorderLayout.NORTH);

    JPanel south = createSouthPanel();
    mainPanel.add(south, BorderLayout.SOUTH);

    JPanel east = createEastPanel();
    mainPanel.add(east, BorderLayout.EAST);

    JPanel west = createWestPanel();
    mainPanel.add(west, BorderLayout.WEST);

    myFrame.setContentPane(mainPanel);
}

我將事情分成JPanels。

采取一組彼此相關的組件,並制作一個繼承自JPanel的新類(在單獨的文件中)。 然后在Main類中,您只需導入該類並像使用其他所有JPanel一樣使用它,除了它已經具有所有內部組件。 Main類僅需要將面板添加到布局中。

在JPanel類中,您可以只在該類中進行所有的初始化,配置和事件偵聽,因此不會使Main類混亂。

我可以看到GUI的單獨方法/類。 我只是不確定除非有大量的表格等,否則整個單獨的軟件包是否值得麻煩。

這是我過去用來減少揮桿動作中的混亂現象的策略。

  1. 通用偵聽器:無需在周圍散布匿名ActionListener類,而是創建一個ActionListener,該ActionListener將對象和方法名稱作為構造函數參數。 觸發后,ActionListener會在指定對象上調用指定方法。 以反射的形式增加了復雜性,但是燒掉了數百行容易出錯的樣板代碼。

  2. 關注點分離。 具有單獨的[Methods | Classes | Packages]用於以下任務:

    • 創建組件:您需要一個新的Textfield嗎? 不要直接調用新的JTextField,而是讓工廠為您創建它。 在創建方法內,您可以進行所有設置,例如首選大小,顏色,字體。 結構化代碼,刪除重復項,並確保整個應用程序的行為相同。 特別適合日期選擇器等復雜控件

    • 將簡單的控件組裝到屬於在一起的單元:標簽+編輯控件+無效輸入的標記; 套按鈕

    • 一堆這樣的單元布局到一個JPanel

    • 將JDialog,JWindow,JFrame或其他任何東西與JPanel一起插入

    • 事件的連線

  3. 考慮JGoodies綁定

Swing是使用MVC模式在內部組織的。

暫無
暫無

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

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