首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于textField的Groovy swingbuilder事件

用于textField的Groovy swingbuilder事件
EN

Stack Overflow用户
提问于 2015-07-06 17:09:13
回答 1查看 1.8K关注 0票数 1

我有以下守则:

代码语言:javascript
复制
textField(id: 'programfilter', actionPerformed: { println("execute some action") })

但是,actionPerform-闭包只在textField有焦点并按下enter时才调用。为了在不同的事件上调用闭包,我必须做什么?例如,单击textField,在其中选择文本,或者简单地对文本的每次更新进行选择?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-06 18:18:13

你可以利用http://docs.groovy-lang.org/latest/html/documentation/core-semantics.html#closure-coercion来做到这一点。仅举一个简单的例子来演示:

代码语言:javascript
复制
import groovy.swing.SwingBuilder
import java.awt.event.*
import javax.swing.event.*
import javax.swing.WindowConstants as WC

SwingBuilder.build() {
    frame(title:'Swing Listener example', size:[300,100], 
            visible:true, defaultCloseOperation:WC.EXIT_ON_CLOSE) {
        gridLayout(cols: 2, rows: 0)
        label 'Input text: '
        input = textField(columns:10, actionPerformed: { echo.text = input.text.toUpperCase() })        
        label 'Echo: '
        echo = label()
        input.document.addDocumentListener(
            [insertUpdate: { echo.text = input.text },
             removeUpdate: { echo.text = input.text },
             changedUpdate: { e -> println e }] as DocumentListener)

        input.addFocusListener(
            [focusGained: { e -> println "Focus gained: $e.cause"},
             focusLost: {e -> println "Focus lost: $e.cause"}] as FocusListener)

        input.addCaretListener({ e ->  println "Caret event: $e"})
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31251716

复制
相关文章

相似问题

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