Groovy SwingBuilder: использование панели прокрутки для отображения списка панелей
Я хотел бы показать список панелей, содержащих компоненты, то есть флажок, метки, кнопки, все на одной горизонтальной линии; каждая панель представляет один набор компонентов для отображения информации для одного элемента. Мне нужно поместить список панелей (количество не определено) внутри панели прокрутки, чтобы они соответствовали высоте основной панели.
Я не могу найти решение для смешивания панели прокрутки и панелей с компонентами.
Я хотел бы получить этот результат:
scrollpanel {
- флажок | item1 | button1 | button1 | label1 | label1
- флажок | item2 | button2 | button2 | label2 | label2
флажок | item3 | button3 | button3 | label3 | Метка3
[...]
}
Вот рабочий пример того, что я сейчас показал здесь: Groovy SwingBuilder: кнопка для изменения цвета панели
Там вы можете увидеть 6 предметов, каждый со своими соответствующими компонентами. Теперь, если бы я хотел отобразить 60 элементов вместо 6, рамка расширилась бы, чтобы соответствовать им, но превысила бы размер экрана.
Мне кажется настолько очевидным, что подобная "панель прокрутки" справилась бы с работой, но я не могу заставить ее работать, хотя я проверил все примеры на уроках Java и связанные с ними вопросы здесь.
ТИА. Мишель
1 ответ
Вы можете поместить панели внутри 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 ]