簡體   English   中英

如何在運行時集成來自不同類的GUI元素?

[英]How do I integrate GUI elements from different classes at runtime?

我試圖通過拆分那些可能隨時間變化的元素來“適應未來”的需求。 在我的應用程序中,我需要能夠適應輸出格式的更改(例如,今天我輸出到CSV文件,將來可能需要直接輸出到SQL Server數據庫或Web服務等)。 。

我通過定義一個抽象類(“ OutputProvider”)來處理此問題,該類將為每種情況創建子類。 我對此感到困惑的一個方面是如何提供特定於每個具體類的配置GUI。 我有一個帶有用於輸出配置的選項卡的設置對話框。 在該選項卡上,我打算提供一個下拉菜單以選擇提供程序,並在其下方提供一個JPanel來保存特定於提供程序的GUI的內容。 如何在運行時在該面板中獲取正確的GUI,並使其針對事件正確運行?

另外,如果有辦法做到這一點,那么額外的好處就是,為了增加對新提供者的支持,我可以簡單地提供一個新的jar或類文件,將其放置在特定的文件夾中,然后應用程序可以在啟動時進行選擇。

我正在使用NetBeans和Swing。

也許您可以在OutputProvider類上使用抽象方法,該方法返回一個包含該提供程序的配置選項的JPanel。 如果您想進一步分離,則可以返回類/類名,而不是返回JPanel。 然后可以在運行時創建一個實例。

這個問題可能會回答您問題的第二部分。

對我來說似乎是一個完美的工廠設計模式候選者,例如,您似乎想調用這樣的名稱(使用偽代碼:´)

//get the writer responsible for storing to any media ... 
Writer objWriter = new Writer ( configForCsvOrDb ) ; 
//perform the actual write according to the type of storage
objWriter.Write(objToWrite ) ; 

阿德里安的解決方案很好。 只需擴展您的OutputProvider即可強制執行以下兩種方法:

/**
 * returns a JPanel that shows configuration options for this outputprovider,
 * after initializing the JPanel with current output options
 */
public JPanel getConfigurationPanel();
/**
 * configures output options using values in configPanel, previously 
 * requested through getConfigurationPanel
 */
public void configureFromPanel(JPanel configPanel) throws BadConfigException;

並將返回的JPanel包含在輸出配置對話框的相應字段中。 當用戶按下“接受”按鈕時,將調用configureFromPanel()

對於策略模式來說,這似乎是一個很好的例子。 您可以使用諸如getOutputPanel()類的方法定義OutputProviderStrategy

暫無
暫無

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

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