繁体   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