Groovy Swingbuilder:如何创建动态菜单

时间:2015-07-07 18:04:33

标签: groovy swingbuilder

我正在通过读取磁盘上的目录并为该目录中的每个文件创建一个menuItem来创建菜单。

每次点击菜单时,我都希望重新读取磁盘。

SwingBuilder似乎不想这样做 - 至少不容易。

我是否必须在使用老式摇摆创建MenuItems的“菜单”中添加一个闭包(我甚至不知道这是否会起作用,因为您已经点击了菜单),或者是否有一些技巧让SwingBuilder在输入时重新评估一个部分?

这就是我现在所拥有的:

File scriptDir = new File("C:/myBatchFiles")
menu(text:"External tools", visible:scriptDir.isDirectory()) {
    scriptDirlistFiles().each{
        File oneItem ->
        String name = oneItem.name
        String command = '"' + scriptDir.path + '/' + name + '"'
        menuItem(action(name:name){MyUtils.cmd(command)}
    }
}

1 个答案:

答案 0 :(得分:3)

您应该能够适应以下内容:

import groovy.swing.*
import javax.swing.event.*

new SwingBuilder().edt {
    def fillMenu = { ->
        scripts.removeAll()
        new File('/tmp').listFiles().each {
            scripts.add(menuItem(text: it.name))
        }
    }
    frame(title: 'Testing', size: [800, 600], visible:true) {
        menuBar {
            menu(id:'scripts', text: 'External Scripts')
        }  
    }
    scripts.addMenuListener([ menuCanceled: { e -> },
                              menuDeselected: { e -> },
                              menuSelected: { e -> fillMenu() } ] as MenuListener)
}