通常在使用JavaBuilder 1时,您可以这样定义一个新组件:
yaml myFrame.yaml:
JFrame(name=frame, title=frame.title, size=packed, defaultCloseOperation=exitOnClose):
- JPanel(name=panel1, tabTitle=tab.panel1Name):
-JTextArea(name=textArea1)
- JPanel(name=panel2, tabTitle=tab.panel2Name):
-JTextArea(name=textArea2)
- JPanel(name=panel3, tabTitle=tab.panel3Name):
-JTextArea(name=textArea3)
Java myFrame.java:
public class MyFrame extends JFrame {
private BuildResult result = SwingJavaBuilder.build(this);
}
JavaBuilders 知道通过文件名加载什么。有没有办法让 JavaBuilders根据组件名称加载另一组名为panel1
...的文件?panel3
这样我的应用程序的一部分就可以写出 yaml 文件,然后我可以在构建 JFrame 时“热部署”它们(使用private BuildResult result = SwingJavaBuilder.build(this);
)
我的目的是读取一个目录,寻找一个文件/文件集,可能如下所示:
my.dir.panel1=available
my.dir.panel1.textArea1=available
my.dir.panel1.textArea1.default=Declarative GUIs!
my.dir.panel1.textArea2=unavailable
my.dir.panel2=available
my.dir.panel2.textArea1=available
my.dir.panel3=available
my.dir.panel3.textArea1=available
my.dir.panel4=unavailable
my.dir.panel4.textArea1=unavailable
然后使用它来填充 Swing 中的组件。我可以使用 snakeYaml 以编程方式写出 Yaml 文件,具体取决于上述属性文件中的“可用”内容,但如果我可以避免重写 Yaml 文件中的JFrame
部分(可能包含不会更改的各种其他组件)将是理想的。
我能想到的唯一另一种方法是像这样在Java中创建多个结果
public class MyFrame extends JFrame {
private BuildResult frankenResult = SwingJavaBuilder.build(this);
private BuildResult subReult1 = SwingJavaBuilder.build(new MyPanel());
JFrame myFrame = (JFrame)result.get("myFrame");
JPanel myPanel = (JPanel)result.get("panel1");
myFrame.add(myPanel);
}
但仔细想想,我不确定我能不能打这个电话SwingJavaBuilder.build(new MyPanel());
那么如何在单独的 yaml 文件中创建组件子集,然后在主 Yaml 文件中引用它们呢?