1

java源码:

class jview implements Runnable{
    public void run(){
        for(int i=1;i<10;i++){
            try {
                Thread.sleep(1000);
                System.out.println(i); // XXX show in UI
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args)throws Exception{     
        String[] roots = new String[] {"C:/Users/groovy"};
        GroovyScriptEngine gse = new GroovyScriptEngine(roots);
        Binding binding = new Binding();
        gse.run("gview.groovy", binding);
        jview j = new jview();
        Thread t = new Thread(j);
        t.start();
    }
}

常规来源:

def swingBuilder = new SwingBuilder()
swingBuilder.edt {
    frame(title: 'ex', size: [200, 150], show: true) {
        borderLayout(vgap: 5)
        panel(constraints: BorderLayout.CENTER, border: emptyBorder(10)) {
            label "java variable" // XXX value of `i`
        }
    }
}

如何i在 Swing UI(来自 Groovy)中显示来自 Java 线程的变量。

4

1 回答 1

0

首先,创建一个在您的run方法中更新的 JTextField:

static JTextField textField = new JTextField("Init...", 5);

public void run() {
    for(int i = 1; i < 10; i++){
        try {
            Thread.sleep(1000);
            textField.setText(String.valueOf(i)); // Update UI
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

在脚本绑定中传递它:

    GroovyScriptEngine gse = new GroovyScriptEngine(roots);
    Binding binding = new Binding();
    binding.setVariable("variableTextField", textField);
    gse.run("gview.groovy", binding);

然后,在 groovy 代码中,您可以使用小部件将其“放入”textField构建器中:

swingBuilder.edt {   
    frame(title: 'ex', size: [200, 150], show: true, defaultCloseOperation: EXIT_ON_CLOSE) { 
        borderLayout(vgap: 5)

        panel(constraints: BorderLayout.CENTER, border: emptyBorder(10)) {
            tableLayout(cellpadding: 5) {
                tr {
                    td {
                        label 'Value'
                    }
                    td {
                        widget(variableTextField)
                    }
                }
            }           
        }
    }
}

基本上,有了这个,你在 Java 中所做的就是用 groovydoOutsideSwingBuilder 改变文本字段setMessage中的值。

于 2014-12-17T00:41:43.193 回答