首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy SwingBuilder :更改面板颜色的按钮

Groovy SwingBuilder :更改面板颜色的按钮
EN

Stack Overflow用户
提问于 2011-06-18 08:03:54
回答 1查看 3.8K关注 0票数 2

为什么这段代码会失败?我想要更改一系列动态构造的几个面板中的一个面板的颜色(预先未知的面板总数)。

由于某些原因,当引用特定面板的名称(例如'panel2')时,此代码可以工作,但当我动态引用它('panelID')时,代码就不起作用了。

代码语言:javascript
复制
import groovy.swing.SwingBuilder
import javax.swing.WindowConstants as WC
import javax.swing.JOptionPane
import javax.swing.BoxLayout as BXL

swing = new SwingBuilder()
frame = swing.frame(title:'test',
    defaultCloseOperation:WC.DISPOSE_ON_CLOSE) {

    panel(id:'mainPanel'){
        def panelID 

        (1..6).each {
            panelID = 'panel' + it

            panel(alignmentX: 0f, id: panelID , opaque:true ,background : java.awt.Color.GREEN){
                label('description') 
                textField(id: "description$it", text: panelID, columns: 70 )
                button(id: "button$panelID", text: panelID, actionPerformed : {
                    panelID.background = java.awt.Color.RED
                    panelID.repaint()                       
                })
            }
        }
        boxLayout(axis: BXL.Y_AXIS)

        panel(id:'secondPanel' , alignmentX: 0f){                       
            button('Quit', actionPerformed:{
                dispose()
            })
        }
    }       
}
frame.pack()
frame.show()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-20 07:20:21

要根据ID获取元素,您需要将ID作为SwingBuilder的参数进行访问,如下所示:

代码语言:javascript
复制
import groovy.swing.SwingBuilder
import javax.swing.WindowConstants as WC
import javax.swing.JOptionPane
import javax.swing.BoxLayout as BXL

swing = new SwingBuilder()
frame = swing.frame(title:'test', pack:true, visible:true, defaultCloseOperation:WC.DISPOSE_ON_CLOSE) {
    panel(id:'mainPanel'){
        (1..6).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
            })
        }
    }       
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6392965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档