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