我想在同一水平线上显示一个包含组件的面板列表,即复选框,标签,按钮;每个面板代表一组组件,用于显示一个项目的信息。 我需要将一个面板列表(数字未确定)放在一个滚动面板中,以适应主面板的高度。
我似乎无法找到将滚动面板和面板与组件混合的解决方案。
我想得到这个结果:
scrollpanel {
复选框| item3 | button3 | button3 | label3 | LABEL3
[...]
}
我目前在这里展示了一个有效的例子: Groovy SwingBuilder : button to change the color of a panel
在那里,你可以看到有6个项目,每个项目都有各自与之相关的组件。 现在,如果我想显示60个项目而不是6个,框架将展开以适合它们但超过屏幕尺寸。
对我来说,我看起来很明显,那种“scrollpanel”可以完成这项工作,但我无法让它工作,尽管我在这里检查了所有关于Java教程和相关问题的例子。
TIA。 米歇尔
答案 0 :(得分:2)
您可以将面板放在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 ]