如何在Griffon中轻松显示/隐藏视图

时间:2010-12-05 01:25:10

标签: groovy griffon

第一:我很震惊,我不得不问这个问题。在文档中没有任何地方它解释了应该如何使用新的“WindowManager”......我已经在这周围几个小时的黑客攻击了,我仍然没有像这样做一些微不足道的做法:

def vName = 'Error'
if (!app.views[vName]) { //I just want to create it once, otherwise I'd just change it's model and want to show() it!
  buildMVCGroup(vName, vName, errorCode: 500, message: "fail detected ;-)") //ok, this indeed shows the idem (as it's an "frame(/**/show: true,/*...*/", but I dont want to create it each time
}

//    app.windowManager.show(app.views.Error) //fails, show() want's an Window, and app.views.Error is of ErrorView type
//    app.views.Error.visible = true //won't display the view
//    app.views.Error.show() // there is no such method

我还需要一种很好的隐藏方式,例如:

//in controller
def view
def hideAction = {
  //view.hide() //fails, no such method...
}

让我开心的另一种方式是“当用户点击OK(在ErrorView中),处理这个MVCGroup时的一种简单方法。我一直在搜索并阅读这些例子,但仍然不能弄清楚如何编写如此简单的应用程序流程嗯......

非常感谢您对如何做到这一点的任何想法, 欢呼声

4 个答案:

答案 0 :(得分:4)

对于帧 - 我做过的......

在我看来,我提供了框架的名称

application(name: 'login', ...

然后在我的控制器中我做了

app.windowManager.hide(app.windowManager.findWindow('login')) app.windowManager.show(app.windowManager.findWindow('workspace'))

所以...我确定我'命名'我的所有观点然后我可以轻松地显示/隐藏窗口管理器......

你对文档的权利。我希望我所做的就是“做正确的事情”。

答案 1 :(得分:2)

确实如此。它调用大多数JComponents上的setVisible函数。

show()/ hide()是Groovy / Griffon中的语法糖,它在J2SE中处于某一点,但很久以来一直被弃用。

答案 2 :(得分:1)

好的,我找到了相当不错的解决方案:

application(/**/){
  //...
  myError = dialog(/**/){
    //thats my error window
  }
}

然后在控制器中我只是:

view.myError.visible = true

这样的事情非常优雅,希望它是“正确的事情”: - )

答案 3 :(得分:0)

另一个选择是为要显示的每个屏幕使用CardLayout。然后,您可以轻松显示/隐藏屏幕。这与个人卡的MigLayout相结合,效果非常好。