我参加Groovy派对有点晚(像大多数其他派对一样),而且我能够在网上找到的关于SwingBuilder的文档也有些有限。我正在尝试用Groovy构建一个游戏应用程序(将我当前的Java代码转换为Groovy)。在Java语言中,我有一个JFrame和多个JPanel,其中包括标签、文本字段和按钮,以及构建图形用户界面时可以使用的所有其他有趣的swing项目。
所有这些的代码可能很麻烦,必须为每个JButton和JPanel声明变量,等等,所以几天前当我在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类,它返回一个菜单面板,这个菜单面板具有控制该面板的功能,还有各种其他的类,这些类也返回做其他各种事情的面板,并将它们全部嵌套在窗格中。
有可能做到这一点吗?我是不是漏掉了什么?
发布于 2012-10-09 20:19:15
我相信这在功能上与您上面的功能相似:
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 )
}
}
}希望它能帮上忙?
https://stackoverflow.com/questions/12792444
复制相似问题