2

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

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

我想得到这个结果:

滚动面板 {

  • 复选框 | 项目1 | 按钮1 | 按钮1 | 标签1 | 标签1
  • 复选框 | 项目2 | 按钮2 | 按钮2 | 标签2 | 标签2
  • 复选框 | 项目3 | 按钮3 | 按钮3 | 标签3 | 标签3

    [ ... ]

}

我目前在这里展示了一个工作示例: Groovy SwingBuilder : button to change the color of a panel

在那里,您可以看到有 6 个项目,每个项目都有各自相关的组件。现在,如果我想显示 60 个项目而不是 6 个,框架会扩大以适应它们,但会超出屏幕尺寸。

对我来说,这种“滚动面板”似乎很明显可以完成这项工作,但我无法让它工作,尽管我检查了 Java 教程的所有示例和相关问题。

蒂亚。米歇尔

4

1 回答 1

3

您可以将面板放在 a 内vbox,然后您将面板放在 a 内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 ]
于 2011-06-22T20:33:27.447 回答