代码之家  ›  专栏  ›  技术社区  ›  Muhammad Alkarouri

类似SwingBuilder的Java GUI语法?

  •  2
  • Muhammad Alkarouri  · 技术社区  · 15 年前

    有没有一个库可以像 SwingBuilder 在Groovy?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Kevin Day    15 年前

    我有一次沿着这条路走,然后发现 MiGLayout -除非我使用的是拆分窗格,否则我通常可以将每个视图放在一个单独的面板中,而不必费事。有一点学习曲线,但一旦你过了驼峰,你可以在几乎没有时间敲出一个真正好看的图形用户界面。

    对于很多设计来说,将面板嵌套到其他面板中的整个范例并不干净-最终会与布局管理器发生冲突。

        2
  •  1
  •   Scott Stanchfield    15 年前

    我不知道有这样一个库,尽管类似的东西是可能的(但是没有命名参数,这会降低可读性)。可能有人把SwingBuilder转换成了java。

    [看起来您可以在 http://kickjava.com/src/groovy/swing/SwingBuilder.java.htm . 我不知道有多大电流]

    引用页上的SwingBuilder示例:

    new SwingBuilder().edt {
        frame(title:'Frame', size:[300,300], show: true) {
        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)
        }
    }
    

    new JFrame() {{
        setTitle("Frame");
        setSize(300,300);
        setLayout(new BorderLayout());
        textlabel = new JLabel("Click the button!");
        add(textlabel, BorderLayout.NORTH);
        add(new JButton("Click Me") {{
            addActionListener(new ActionListener() {
                @Override public void actionPerformed(ActionEvent e) {
                    count++;
                    textlabel.setText("Clicked " + count + " time(s).");
                    System.out.println("clicked");
            }});
        }}, BorderLayout.SOUTH);
        setVisible(true);
    }};
    

    注意:这里的问题是当你使用

    new SomeClass() {{ ... }}