加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:如何处理我的应用程序插件中的自定义设置?

发布时间:2020-12-14 19:34:32 所属栏目:Java 来源:网络整理
导读:我目前正在开发一个从其他设备接收命令的应用程序.我将提供一个接口,让其他人开发自己的传入命令的解释(插件).其他人开发的每个插件都可以具有需要由用户提供的任何自定义设置. 例如,名为“KeyboardPlugin”的插件可以支持设置以设置按键之间的延迟,但也显示
我目前正在开发一个从其他设备接收命令的应用程序.我将提供一个接口,让其他人开发自己的传入命令的解释(插件).其他人开发的每个插件都可以具有需要由用户提供的任何自定义设置.

例如,名为“KeyboardPlugin”的插件可以支持设置以设置按键之间的延迟,但也显示要按下的所有支持键的列表.另一个插件可以是例如称为“MouseMovePlugin”,其中用户可以选择鼠标的准确度及其速度.

现在我的问题是,每个插件的设置需要是1.在UI中显示,2.在用户选择设置之后,必须将它们解析回插件以让插件知道用户选择了什么.

我正在使用Java,而UI是在Swing中开发的.有一个选项面板,显示与插件没有直接关系的选项,如常用选项.但是在同一个面板上,我想显示插件提供的设置.

插件设置如下所示:

> a)“请输入两次按键之间的延迟 – > [Textbox with
Int作为输入](最小1;最大500)
> b)“bla bla – > [Checkbox](带
布尔)”
> c)“Bla bla 2 – > [Textbox](以String值作为输入;
关于设置b!)
> d)“选择按钮”[“a”,“b”,“c”]

如您所见,插件设置可以是例如int,boolean,string,但也可以是示例d,数组或枚举.
我现在的问题是,我该如何处理?每个插件都可以有一组设置类型,这些设置类型也可以相互依赖,例如c取决于用户对b的选择.

1)首先,我需要一种技术来询问插件的设置,好吧,我可以调用插件接口中提供的方法,但它应该返回什么?我的意思是,List可以工作但是设置选项之间没有依赖关系.

2)如何“设置插件中的设置”.如果用户选择他/她的首选设置,那么我该如何告诉插件?

到目前为止,我能想到的唯一解决方案如下:
一种简单的域特定语言(DSL),如下所示:
varName:type(min,max,default)“UI问题”
作为给定的例子:

buttonDelay: boolean(false) "Enable button delay"
if(buttonDelay){
buttonDelayTime: int(1,500,25) "Choose delay between buttons"
}

我会将设置DSL解析为Java树,以便能够进行简单的类型检查,并使用树来生成设置UI面板.
如果用户然后选择他想要的设置(可能是插件提供的设置的子集,因为他/她不能使用所有提供的设置),我会将Map解析为插件,如Map,其中Key是varName(来自示例:“buttonDelay”和“buttonDelaytime”).我可能有多个容器用于不同的设置类型,比如Integer设置,有一个容器,但也有boolean,array等.
通过将地图解析为插件,插件可以向地图询问每个设置varName的设置,例如:

public void initPluginSettings(Map<String,SettingsInterface> settingsMap){
BooleanSetting buttonDelay = settingsMap.get("buttonDelay"); 
IntegerSetting buttonDelayTime = settingsMap.get("buttonDelayTime");
}

有人有更简单/更聪明的解决方案吗?或者这个问题有一些模式吗?我已经在网上搜索了但我找不到任何东西.要实现DSL,使用树来键入检查等对我来说这个问题似乎有点“太多”.我的意思是,我可以做到这一点但我希望在开始之前得到其他人的建议.

先感谢您!

解决方法

怎么样的东西:
interface Plugin {
  Map<String,String> getSettingsList();
  getPossibleValuesFor(String key);
  setValue(String key,.. value);
  .. getValue();
}

getSettingsList()将返回从键到类型的映射; getPossibleValuesFor()是这样的,所以插件开发人员可以限制类型的默认范围或强加设置之间的依赖关系.然后为它添加持久性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读