Swingbuilder的多个实例?

时间:2012-10-09 03:30:51

标签: java swing groovy swingx swingbuilder

我对Groovy派对有点迟了(和大多数其他派对一样),我在网上找到的关于SwingBuilder的文档有点受限。我正在尝试在Groovy中构建一个游戏应用程序(将我当前的Java代码转换为Groovy)。在Java中,我有一个JFrame和多个JPanel,其中包括标签和文本字段和按钮以及可用于构建GUI的所有其他有趣的swing项目。

所有这些的代码可能很麻烦,必须为每个JButtonJPanel等等声明变量,所以当我在groovy中发现SwingBuilder时就很自然了我以前欣喜若狂。

然而,这些例子有些限制。所以这是我的初始代码。

def Game(){
    mainMenu = new MainMenuPanel()
    gPane = new SwingBuilder()
    gPane.edt{
        frame(size:[1024,768],
            defaultCloseOperation: JFrame.EXIT_ON_CLOSE, location:[75,50], show:true, pack:false){
            container(container:mainMenu){}
            widget(mainMenu)
            }
        }
    }
    mainMenu.shell.show()
}

MainMenuPanel我有这段代码

class MainMenuPanel extends JPanel implements ActionListener, KeyListener, ItemListener { 
    public shell
shell = new SwingBuilder()
    shell.panel(id: "mainM",/*size:[512, 354],
    shell.edt{frame(show:true){panel(size:[512, 354],
            layout: new GridLayout(cols:1, rows: 7),*/
            visible:true, constraints: BL.NORTH){

            textLabel = label(text: "Welcome Travelers", horizontalAlignment: 0)
            speak = button(CreateButton("Say Hello", 83), 
                actionPerformed:{ shell.optionPane(message: "Hello World").createDialog(null, "Hello").show()})
            }
        }

当我运行groovy脚本时,我得到一个JFrame,其中没有任何内容。我已经尝试过这种代码的各种组合,有时我会得到两个帧,但它们并没有相互嵌套。大部分时间我都没有得到什么。

我正在尝试做的目的是有一个MainMenu类,它返回一个菜单面板,它具有控制该面板的功能,还有各种其他类也可以返回执行其他各种操作的面板。将它们全部嵌入窗格中。

有可能这样做吗?我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:1)

我相信这在功能上类似于你上面的内容:

import groovy.swing.SwingBuilder

def mainMenu = { builder ->
  builder.panel( id:'mainM' ) {
    label( text: 'Welcome Travelers' )
    button( text: 'Say Hello', actionPerformed:{
      builder.optionPane( message:'Hello World' )
             .createDialog( null, 'Hello' )
             .show()
    } )
  }
}

new SwingBuilder().with { builder ->
  builder.edt {
    frame( size:[ 1024, 768 ], show:true ) {
      panel()
      mainMenu( builder )
    }
  }
}

希望有帮助吗?