2011-06-22 50 views
2

我想显示一个包含组件的面板列表,例如复选框,标签,按钮,都在同一水平线上;每个面板代表一组组件来显示一个项目的信息。 我需要将面板列表(数字未确定)放在一个滚动面板内以适应主面板的高度。Groovy 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。 Michel

+0

+1有趣的问题:) –

回答

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 ] 
+0

哇!再次是一流的答案;开箱即用!我更加欣赏我一直在寻找和尝试几个小时。 tyvm! –

+1

很高兴帮助:-)祝你好运! –

+0

这里使用'alignmentX'有什么用?它实际上做了什么? –