1

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

我想知道是否可以将这两种方法结合起来?我想用它SwingBuilder来管理视图/模型绑定和一些高级 GUI 任务(如JDesktopPaneJInternalFrame),但将内容设计为JFrames 由 WindowBuilder 管理。

这是一个简单的 groovy 脚本:

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的 s。第二个JInternalFrame包含ExamplePanel,但它没有检测按钮点击或更改标签内容的基础设施。

有没有一种时髦的方法来获得与ExamplePanel我在SwingBuilder定义中相同的行为internalFrame

4

2 回答 2

1

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

  1. 选择一个特定的节点。在您的情况下ExamplePanelPanel您可以通过panel()以下方式使用节点

    internalFrame { 面板(新 ExamplePanel()) }

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

    internalFrame { container(new ExamplePanel()) { /* 进一步的自定义 */ } }

  3. 您可以创建自己的节点工厂并将其注册到构建器。Griffon 指南有一节展示了如何完成。 http://griffon-framework.org/guide/2.14.0/#_views_builder_customizers

于 2018-03-28T09:12:52.677 回答
0

这不是“答案”,因为它没有回答您的问题。但是我想指出另一个方向。

GUI 设计工具经常使用一些网格布局和从您的绘图中创建的任意位置。如果您正确使用布局,GUI 可以正确响应应用程序的大小调整,而设计工具中的网格布局通常不能很好地调整大小。

Swing 布局有一种领域语言,称为 Miglayout。一旦你掌握了这个想法,这并不难,我发现使用 groovy swing builder 和 Miglayout 很容易创建非常复杂的 GUI。

我在这里的 3 篇博文中写下了我的经历。

https://sites.google.com/site/dracodoc/groovy/swingbuildermiglayout

于 2018-03-25T03:23:11.543 回答