GroovyでSwingX
いまさらながらgroovy始めました。
Java で Swing で GUI なアプリを組んでいるんですが、
手続的なレイアウト構築はもう嫌だなぁと思っていて、
Java FX あたりに注目してましたが、script はなくなるし、Linux対応はだいぶ先な感じだし。
で、groovyでほぼ宣言的なレイアウトが組めそうだと知り、試しています。
groovyには標準でSwingBuilderというクラスがありますが、
SwingXに対応したSwingXBuilderもあるとのことで、
id:skrb さんのJava技術最前線:ITproの記事
Yet Another Swing - SwingX 第2回 Swingには存在しないコンポーネント
のタスクペインをgroovyで書き直して見ました。
import groovy.swing.SwingXBuilder import java.awt.event.KeyEvent import javax.swing.WindowConstants as WC class TaskPaneDemo { def static SwingXBuilder swing = new SwingXBuilder() TaskPaneDemo() { def frame1 = swing.frame(title:"TaskPane Demo", size:[200,300], defaultCloseOperation:WC.EXIT_ON_CLOSE) { scrollPane() { taskPaneContainer() { taskPane(title:"ファイル", collapsed:true, mnemonic:KeyEvent.VK_F) { button(text:"Open", actionPerformed: { println "open" } ) // ★ button(text:"Save", actionPerformed: { println "save" } ) } taskPane(title:"オプション", mnemonic:KeyEvent.VK_O) { bg1 = buttonGroup() checkBox(text:"Option 1", selected:true, buttonGroup:bg1) checkBox(text:"Option 2", buttonGroup:bg1) checkBox(text:"Option 3", buttonGroup:bg1) } } } } frame1.visible = true } static void main(args) { swing.edt { new TaskPaneDemo() } } }
コメントで★となっているあたりをbuttonで書いちゃいましたが、元記事では AbstractAction を使ってました。
groovy+SwingXBuilderでAbstractActionをどう扱うか分からなかったので、buttonにしちゃいました。(^^;