我是groovy和griffon的新手,目前在SwingBuilder上玩一下。我想添加一个JSplitPane的子类(它使用http://www.formdev.com/blog/swing-tip-jsplitpane-with-zero-size-divider/中描述的细分隔符。)
您可以在下面找到视图定义脚本。我使用了一个容器() - 元素来添加我的Splitpane-subclass。当我启动我的应用程序时,我得到一个java.lang.IllegalArgumentException。任何想法如何解决这一问题?
frame(id:"frame",
title: 'The new database explorer implemented with groovy/griffon',
size: [600, 400],
locationByPlatform:true,
iconImage: imageIcon('/griffon-icon-48x48.png').image,
iconImages: [imageIcon('/griffon-icon-48x48.png').image,
imageIcon('/griffon-icon-32x32.png').image,
imageIcon('/griffon-icon-16x16.png').image]) {
panel (id:'mainPanel',
opaque:false) {
borderLayout()
toolBar(id:'toolBar',
constraints:NORTH,
floatable:false,
opaque: false,
preferredSize: new Dimension(200,50)) {
hglue()
textField(id:'search', "clientPropertyJTextField.variant":"search",
maximumSize: new Dimension(150,35),
preferredSize: new Dimension(150,35))
}
panel(id: 'centerPanel',
constraints: CENTER,
opaque: true,
background: new Color(238, 238, 238)) {
borderLayout()
container (new SplitPaneWithThinDivider(),
id:'mainSplitPane',
constraints: CENTER,
dividerLocation: 150
) {
scrollPane(id:'treeScroller', border:null) {
tree(id:'explorerTree',
rootVisible: false)
}
scrollPane(border:null) {
textArea()
}
}
}
}
}
2012-03-15 06:45:01,778 [AWT-EventQueue-0] ERROR org.codehaus.griffon.runtime.builder.UberBuilder - An error occurred while building at.rehdie.dbexp.main.ExplorerFrameView@59c87031 java.lang.IllegalArgumentException: cannot add to layout: unknown constraint: null at java_awt_Container$add.call(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:140) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4_closure7_closure8.doCall(ExplorerFrameView.groovy:54) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4_closure7_closure8.doCall(ExplorerFrameView.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:140) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4_closure7.doCall(ExplorerFrameView.groovy:49) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4_closure7.doCall(ExplorerFrameView.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:140) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4.doCall(ExplorerFrameView.groovy:47) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4.doCall(ExplorerFrameView.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:140) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2.doCall(ExplorerFrameView.groovy:31) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2.doCall(ExplorerFrameView.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:167) at at.rehdie.dbexp.main.ExplorerFrameView.run(ExplorerFrameView.groovy:23) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:151) at org.codehaus.griffon.runtime.builder.UberBuilder.build(UberBuilder.groovy:155) at org.codehaus.griffon.runtime.core.AbstractMVCGroup$1.run(AbstractMVCGroup.java:129) 2012-03-15 06:45:01,781 [main] ERROR griffon.util.GriffonExceptionHandler - Uncaught Exception java.lang.RuntimeException: java.lang.IllegalArgumentException: cannot add to layout: unknown constraint: null at griffon.swing.SwingUIThreadHandler.executeSync(SwingUIThreadHandler.java:46) at griffon.core.UIThreadManager.executeSync(UIThreadManager.java:247) at org.codehaus.griffon.runtime.core.AbstractMVCGroup.buildScriptMember(AbstractMVCGroup.java:127) at org.codehaus.griffon.runtime.core.DefaultMVCGroupManager.initializeMembers(DefaultMVCGroupManager.java:230) at org.codehaus.griffon.runtime.core.DefaultMVCGroupManager.buildMVCGroup(DefaultMVCGroupManager.java:149) at org.codehaus.griffon.runtime.core.AbstractMVCGroupManager.createMVCGroup(AbstractMVCGroupManager.java:238) at org.codehaus.griffon.runtime.core.AbstractMVCGroupManager.createMVCGroup(AbstractMVCGroupManager.java:186) at org.codehaus.griffon.runtime.core.AbstractGriffonApplication.createMVCGroup(AbstractGriffonApplication.java:499) at org.codehaus.griffon.runtime.core.AbstractGriffonApplication.startup(AbstractGriffonApplication.java:313) at griffon.swing.AbstractSwingGriffonApplication.realize(AbstractSwingGriffonApplication.java:78) at griffon.swing.AbstractSwingGriffonApplication.run(AbstractSwingGriffonApplication.java:132) at griffon.swing.SwingApplication.main(SwingApplication.java:36) Caused by: java.lang.IllegalArgumentException: cannot add to layout: unknown constraint: null at java_awt_Container$add.call(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:140) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4_closure7_closure8.doCall(ExplorerFrameView.groovy:54) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4_closure7_closure8.doCall(ExplorerFrameView.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:140) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4_closure7.doCall(ExplorerFrameView.groovy:49) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4_closure7.doCall(ExplorerFrameView.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:140) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4.doCall(ExplorerFrameView.groovy:47) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2_closure4.doCall(ExplorerFrameView.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:140) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2.doCall(ExplorerFrameView.groovy:31) at at.rehdie.dbexp.main.ExplorerFrameView$_run_closure2.doCall(ExplorerFrameView.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:96) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:167) at at.rehdie.dbexp.main.ExplorerFrameView.run(ExplorerFrameView.groovy:23) at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:151) at org.codehaus.griffon.runtime.builder.UberBuilder.build(UberBuilder.groovy:155) at org.codehaus.griffon.runtime.core.AbstractMVCGroup$1.run(AbstractMVCGroup.java:129)
答案 0 :(得分:2)
一种疯狂的,未经测试的猜测,但确实如此:
widget( new SplitPaneWithThinDivider(),
id:'mainSplitPane',
constraints: CENTER,
dividerLocation: 150,
leftComponent: scrollPane(id:'treeScroller', border:null) {
tree(id:'explorerTree', rootVisible: false )
},
rightComponent: scrollPane(border:null) {
textArea()
} )
完全工作?
答案 1 :(得分:0)
尝试使用Griffon 0.9.5-rc2的代码,但是使用了application()而不是frame()和splitPane(),因为我无法访问自定义的SplitPaneWithThinDivider组件并且它可以工作。我假设ExplorerFrameView属于辅助MVC组。您是否尝试过使用application()而不是frame()?
每个Views可以拥有尽可能多的application()节点,因为此节点与frame()具有几乎相同的行为,但它知道如何处理applet。
答案 2 :(得分:0)
感谢您的回复,Tim的版本完美无缺。我也尝试了以下内容:
splitPane (new SplitPaneWithThinDivider(),
id:'mainSplitPane',
constraints: CENTER,
dividerLocation: 150,
"clientPropertyQuaqua.Tree.style": "sideBar",
border: null) {
scrollPane(id:'treeScroller', border:null) {
tree(id:'explorerTree',
rootVisible: false)
},
scrollPane(border:null) {
textArea()
}
}
但是这样,splitpane的左侧组件始终是默认的“左键”(当我使用new JSplitPane()
而不是new SplitPaneWithThinDivider()
时,情况也是如此)。
当我将其更改为
时splitPane (new SplitPaneWithThinDivider(),
id:'mainSplitPane',
constraints: CENTER,
dividerLocation: 150,
"clientPropertyQuaqua.Tree.style": "sideBar",
border: null) {
scrollPane(id:'treeScroller', border:null) {
tree(id:'explorerTree',
rootVisible: false)
},
scrollPane(border:null) {
textArea()
}
}
bean(mainSplitPane, leftComponent: treeScroller)
它奏效了。