Groovy SwingBuilder: использование панели прокрутки для отображения списка панелей - PullRequest
2 голосов
/ 22 июня 2011

Я хотел бы показать список панелей, содержащих компоненты, то есть флажок, метки, кнопки, все на одной горизонтальной линии; каждая панель представляет один набор компонентов для отображения информации для одного элемента. Мне нужно поместить список панелей (число не определено) внутри панели прокрутки, чтобы они соответствовали высоте основной панели.

Кажется, я не могу найти решение для смешивания панели прокрутки и панелей с компонентами.

Я бы хотел получить такой результат:

панель прокрутки {

  • флажок | item1 | button1 | button1 | label1 | label1
  • флажок | item2 | button2 | button2 | label2 | label2
  • флажок | item3 | button3 | button3 | label3 | Метка3

    [...]

} * * тысяча двадцать-один

Вот рабочий пример того, что я сейчас показал здесь: Groovy SwingBuilder: кнопка для изменения цвета панели

Там вы можете видеть, что есть 6 предметов, каждый со своими соответствующими компонентами, относящимися к нему. Теперь, если бы я хотел отобразить 60 элементов вместо 6, рамка расширилась бы, чтобы соответствовать им, но превысила бы размер экрана.

Мне кажется настолько очевидным, что подобная «панель прокрутки» справилась бы с работой, но я не могу заставить ее работать, хотя я проверил все примеры на уроках Java и связанные с ними вопросы здесь.

ТИА. Michel

1 Ответ

2 голосов
/ 23 июня 2011

Вы можете поместить панели внутри vbox, что, в свою очередь, вы положите внутрь scrollPane.

Взяв код из предыдущего вопроса, вы получите что-то вроде этого:

import groovy.swing.SwingBuilder
import javax.swing.WindowConstants as WC
import javax.swing.JOptionPane
import javax.swing.JScrollPane
import javax.swing.BoxLayout as BXL

int numPanels = 20

swing = new SwingBuilder()
frame = swing.frame(title:'test', pack:true, visible:true, defaultCloseOperation:WC.HIDE_ON_CLOSE) {
  panel(id:'mainPanel'){
    scrollPane( verticalScrollBarPolicy:JScrollPane.VERTICAL_SCROLLBAR_ALWAYS ) {
      vbox {
        (1..numPanels).each { num ->
          def panelID = "panel$num"
          def pane = panel( alignmentX:0f, id:panelID, background:java.awt.Color.GREEN ) {
            label('description') 
            textField( id: "description$num", text:panelID, columns: 70 )
            button( id: "buttonpanel$num", text:panelID, actionPerformed:{
              swing."$panelID".background = java.awt.Color.RED
            } )
          }
        }
      }
    }

    boxLayout(axis: BXL.Y_AXIS)
    panel(id:'secondPanel' , alignmentX: 0f){                       
      button('Quit', actionPerformed:{
        frame.visible = false
      })
    }
  }       
}
frame.size = [ frame.width, 600 ]
...