1

私は次のコードを持っています:

textField(id: 'programfilter', actionPerformed: { println("execute some action") })

ただし、actionPerformed-closure は、textField にフォーカスがあり、Enter キーが押されたときにのみ呼び出されます。textField をクリックする、その中のテキストを選択する、または単純にそのテキストが更新されるたびに、さまざまなイベントでクロージャーが呼び出されるようにするにはどうすればよいですか?

4

1 に答える 1

4

閉鎖強制を活用してそれを行うことができます。簡単な例を示します。

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"})
    }
}
于 2015-07-06T18:18:13.007 に答える