Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy Swingbuilder:如何创建动态菜单_Groovy_Swingbuilder - Fatal编程技术网

Groovy Swingbuilder:如何创建动态菜单

Groovy Swingbuilder:如何创建动态菜单,groovy,swingbuilder,Groovy,Swingbuilder,我通过从磁盘上读取一个目录并为该目录中的每个文件创建一个菜单项来创建菜单 我想让它在每次单击菜单时重新读取磁盘 SwingBuilder似乎不想这么做——至少不容易做到 我是否必须在使用老式swing创建菜单项的“菜单”中添加一个闭包(我甚至不知道这是否可行,因为您已经单击了菜单),或者是否有一些技巧可以让SwingBuilder在输入某个节时重新评估该节 以下是我现在拥有的: File scriptDir = new File("C:/myBatchFiles") menu(text:"Ext

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

我想让它在每次单击菜单时重新读取磁盘

SwingBuilder似乎不想这么做——至少不容易做到

我是否必须在使用老式swing创建菜单项的“菜单”中添加一个闭包(我甚至不知道这是否可行,因为您已经单击了菜单),或者是否有一些技巧可以让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)}
    }
}

您应该能够适应以下情况:

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)
}

谢谢你,我本来应该能弄明白的,但是语法方面的一些东西让我很困惑。很有道理!另外,我真的很喜欢这种事件映射语法——必须将其纳入常规Groovy语法中