2

ディスクからディレクトリを読み取り、そのディレクトリ内の各ファイルの 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)}
    }
}
4

1 に答える 1

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)
}
于 2015-07-07T20:42:57.847 に答える