我想知道Java中是否有任何关于声明式GUI编程的建议。(我讨厌基于视觉的图形用户界面创建器/编辑器软件,但我对手动实例化JPanels、but、JLabels和JLists等感到有点厌倦。)
这是我的总体问题,但对于我正在考虑采取的方法,我有两个具体的问题:
XUL
编辑:这里有很多很棒的答案!(我在上面加上了#3 )我特别感谢听到你们中的任何一个人在实际应用中使用这些框架的经验。
附注:我确实尝试了几次google搜索("java gui声明式“),只是不太知道该找什么。
发布于 2009-04-17 08:56:29
您可能会了解一下javabuilders;它使用YAML来构建Swing UI。
manual PDF中的一个简单示例
JFrame:
name: myFrame
title: My Frame
content:
- JLabel:
name: myLabel2
text: My First Label
- JLabel:
name: myLabel2
text: My Second Label
或者:
JFrame:
name: myFrame
title: My Frame
content:
- JLabel: {name: myLabel2, text: My First Label}
- JLabel: {name: myLabel2, text: My Second Label}
或者甚至是:
JFrame(name=myFrame,title=My Frame):
- JLabel(name=myLabel2, text=My First Label)
- JLabel(name=myLabel2, text=My Second Label)
发布于 2009-05-28 04:41:16
作为CookSwing的作者,我在进行实际实现之前对这个主题进行了长时间的仔细研究。我靠编写Java Swing GUI应用程序为生。
如果您打算使用任何类型的命令式编程语言来描述Java Swing组件,那么您不妨直接使用Java。Groovy等只是增加了复杂性,并没有太多的简化。
声明式语言要好得多,因为即使是非程序员也能理解它,特别是当您需要将微调特定布局的任务委托给艺术家时。XML是声明性语言(优于其他选择)的完美选择,因为它的简单性、可读性和大量可用的编辑器/转换工具等。
这里是声明式GUI编程中面临的问题,没有任何特殊的顺序。这些问题已经在CookSwing中得到了解决。
发布于 2009-04-17 11:38:06
如果简洁性很重要,你可以考虑双括号的习惯用法:
new JFrame("My Frame") {{
setName("myFrame");
add(new JLabel("My First Label") {{
setName("myLabel2");
}};
add(new JLabel("My Second Label") {{
setName("myLabel2");
}};
}}
然后,您就不会失去任何众所周知的通用编程语言的能力(您知道您将需要它,而JellyTags很糟糕)。您所需要的只是一个额外的小习惯用法。
它的使用不是很多,因为实际上人们使用XML并不能解决真正的痛点。
通常,您可以使用构建器层来抽象重复的代码。GUI代码并不一定要写得很差,只是几乎所有的代码都写得很差(包括在教科书中)。
https://stackoverflow.com/questions/761237
复制相似问题