gpt4 book ai didi

java - 是否可以将 Groovy 的 SwingBuilder 与 Java JFrame 子类结合起来?

转载 作者:太空宇宙 更新时间:2023-11-04 10:36:00 27 4
gpt4 key购买 nike

我正在编写一个 Griffon/Groovy/Swing 应用程序。不过,我也喜欢使用所见即所得 GUI 工具,例如 Eclipe 的 WindowBuilder 工具。

我想知道是否可以将这两种方法结合起来?我想使用 SwingBuilder 来管理 View /模型绑定(bind)和一些高级 GUI 任务(例如 JDesktopPaneJInternalFrame),但将内容设计到由 WindowBuilder 管理的 JFrame 中。

这是一个简单的常规脚本:

package example

import groovy.swing.SwingBuilder
import java.awt.BorderLayout as BL

count = 0
new SwingBuilder().edt {
frame(title: 'Frame', size: [300, 300], show: true) {
desktopPane() {
internalFrame(visible: true, bounds: [25, 25, 200, 100]) {
borderLayout()
textlabel = label(text: 'Click the button!', constraints: BL.NORTH)
button(text:'Click Me',
actionPerformed: {count++; textlabel.text = "Clicked ${count} time(s)."; println "clicked"}, constraints:BL.SOUTH)
}

internalFrame(visible: true, bounds: [50, 50, 200, 100]).add(new ExamplePanel())
}
}
}

这是 JFrame 的 ExamplePanel 子类:

package example;

import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JLabel;
import javax.swing.JButton;

public class ExamplePanel extends JPanel {

/**
* Create the panel.
*/
public ExamplePanel() {
setLayout(new BorderLayout(0, 0));

JLabel textLabel = new JLabel("Click the button!");
add(textLabel, BorderLayout.NORTH);

JButton button = new JButton("Click Me");
add(button, BorderLayout.SOUTH);

}

}

groovy 脚本创建一个 JDesktopPane 和两个视觉上相同的 JInternalFrame。第二个 JInternalFrame 包含 ExamplePanel,但它没有用于检测按钮点击或更改标签内容的基础结构。

有没有一种绝妙的方法可以在 ExamplePanel 中获得与我在 SwingBuilder 定义的 internalFrame 中获得相同的行为?

最佳答案

是的,您可以使用不同的替代方案嵌入任何自定义组件:

  1. 选择一个特定节点。在您的情况下,ExamplePanel扩展了Panel,因此您可以通过以下方式使用panel()节点

    内部框架{面板(新的ExamplePanel())}

  2. 选择一个通用节点。您可以使用 widgetcontainer。前者不接受嵌套,而后者则接受。

    内部框架{container(new ExamplePanel()) {/* 进一步定制 */}}

  3. 您可以创建自己的节点工厂并向构建器注册。 Griffon 指南中有一个部分展示了如何做到这一点。 http://griffon-framework.org/guide/2.14.0/#_views_builder_customizers

关于java - 是否可以将 Groovy 的 SwingBuilder 与 Java JFrame 子类结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49472177/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com