Groovy SwingBuilder:使用滚动面板显示面板列表

时间:2011-06-22 17:32:24

标签: groovy scroll swingbuilder

我想在同一水平线上显示一个包含组件的面板列表,即复选框,标签,按钮;每个面板代表一组组件,用于显示一个项目的信息。 我需要将一个面板列表(数字未确定)放在一个滚动面板中,以适应主面板的高度。

我似乎无法找到将滚动面板和面板与组件混合的解决方案。

我想得到这个结果:

scrollpanel {

  • 复选框| item1 | button1 | button1 | label1 | label1的
  • 复选框| item2 | button2 | button2 | label2 | LABEL2
  • 复选框| item3 | button3 | button3 | label3 | LABEL3

    [...]

}

我目前在这里展示了一个有效的例子: Groovy SwingBuilder : button to change the color of a panel

在那里,你可以看到有6个项目,每个项目都有各自与之相关的组件。 现在,如果我想显示60个项目而不是6个,框架将展开以适合它们但超过屏幕尺寸。

对我来说,我看起来很明显,那种“scrollpanel”可以完成这项工作,但我无法让它工作,尽管我在这里检查了所有关于Java教程和相关问题的例子。

TIA。 米歇尔

1 个答案:

答案 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 ]