Как мне легко показать / скрыть взгляды в гриффоне

Первое: я в шоке, что мне нужно задать этот вопрос. Нигде в документах не объясняется, как должен использоваться новый 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 ответа

Решение

Хорошо, я нашел довольно хорошее решение для этого:

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

И тогда в контроллере я бы просто:

view.myError.visible = true

Это довольно элегантно для такой вещи, надеюсь, что это "то, что нужно сделать":-)

Для кадров - что я сделал...

На мой взгляд, я предоставляю название для кадра

application(name: 'login', ...

Затем в моем контроллере я делаю

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

Итак... я удостоверяюсь, что я "назову" все мои представления, а затем я могу легко показать / скрыть с помощью оконного менеджера

Ваше право по поводу документов. Я надеюсь, что то, что я делаю, является "правильным делом тоже".

Это точно. Он вызывает функцию setVisible, которая есть в большинстве JComponents.

show () / hide () - синтаксический сахар в Groovy/Griffon, который когда-то был в J2SE, но долгое время считался устаревшим.

Другой вариант - использовать CardLayout для каждого экрана, который вы хотите отобразить. Тогда вы можете легко показать / скрыть экраны. Это в сочетании с MigLayout для отдельных карт работает довольно хорошо.

Другие вопросы по тегам