numPanels を 20 などの固定値にすると、実に素晴らしくグルーヴィーなスイングになります。
しかし、2 日以来、groovy.swing.Spinner を使用して多かれ少なかれパネルを動的に追加しようとしています (私のプログラムは、異なるデータベースに接続し、異なる db テーブルから値を交換するために使用されます)。バインド、再検証、再描画を試みましたが、スピナーから新しい値を取得するために閉鎖を行うことはできません...
import groovy.swing.SwingBuilder
import javax.swing.WindowConstants as WC
import javax.swing.JOptionPane
import javax.swing.JScrollPane
import javax.swing.BoxLayout as BXL
import javax.swing.SpinnerNumberModel
int numPanels = 2
swing = new SwingBuilder()
def setPanelAmount = swing.action(name:'Amount of Panels in vbox-element', closure: this.&setPanelAmount )
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){
hbox(){
label 'Change amount of panels:'
hstrut(10)
spinner(id: 'numPanelSpinner', stateChanged: this.&setPanelAmount, model: new SpinnerNumberModel(2, 2, 10, 1))
hstrut(50)
button('Quit', actionPerformed:{
frame.visible = false
})
}
}
}
}
frame.size = [ frame.width, 600 ]
def setPanelAmount(event) {
numPanels = swing.numPanelSpinner.getValue()
}