Как динамически построить панель с Griffon

У меня есть панель в виде грифона

MyAppView.groovy

panel(id: 'tabpanelWest', constraints: WEST, border: emptyBorder(6)) {
        boxLayout(axis: BoxLayout.Y_AXIS)
        button('Add', actionPerformed: controller.addToggleButton)
        toggleButton(new JToggleButton('Secretaría',imageIcon('/onbutton.png'), true), itemStateChanged: controller.toggleRly)
        toggleButton(new JToggleButton('Hall Entrada',imageIcon('/onbutton.png'), true), itemStateChanged: controller.toggleRly)
}

В моем MyAppController.groovy у меня есть следующие закрытия:

    def toggleRly = { evt ->
        def toggleButton = evt.source
        def status = toggleButton.isSelected() ? 1 : 0
        // Calls to a service which does some stuff
        URL url = status ? app.getResourceAsURL('onbutton.png') : app.getResourceAsURL('offbutton.png')        
        toggleButton.setIcon(new ImageIcon(url))
        toggleButton.setSelected(status ? true : false)       
  }

  def addToggleButton = { evt ->
      execInsideUIAsync {
        URL url = app.getResourceAsURL('onbutton.png')
        def panel = view.tabpanelWest
        def jtogglebutton = new JToggleButton('Secretaría',new ImageIcon(url), true)
        panel.add(jtogglebutton) 
        panel.revalidate()
      }
 }

Я хочу добавить кнопки динамического переключения на свою панель, когда пользователь отправляет форму, которая станет частью пользовательского интерфейса. В приведенном выше примере я использую простую кнопку.

Замыкание addToogleButton добавляет JTogglebutton, но я не знаю, как подключить прослушиватель, такой как представление "itemStateChanged: controller.toggleRly)", так что при нажатии на нее вызывается toggleRly закрытия моего контроллера.

Я безуспешно пытался с

panel.add(new SwingBuilder().edt {toggleButton(jtogglebutton, itemStateChanged: view.controller.toggleRly)})

person Sergio del Amo    schedule 30.05.2012    source источник


Ответы (1)


Вы можете использовать SwingBuilder DSL для компонентов напрямую (JToggleButton)

Попробуй это:

def addToggleButton = { evt ->
      edt {
        def panel = view.tabpanelWest
        def jtogglebutton = toggleButton(text:'Secretaria', selected:true, itemStateChanged: toggleRly)
        panel.add(jtogglebutton)
        panel.revalidate()
      }
 }
person Xeon    schedule 30.05.2012