単純なプログラムを書換えよう(Groovy編)−とりあえず書いてみた
Groovyに備わっているSwingBuilderを使用してGUIを作成する.とりあえず書いてみた.
//g1.groovy import groovy.swing.SwingBuilder import java.awt.BorderLayout builder=new SwingBuilder() view=builder.frame(defaultCloseOperation:javax.swing.WindowConstants.EXIT_ON_CLOSE, size:[200,100]){ //defaultCloseOperationのデフォルトはHIDE_ON_CLOSE. //EXIT_ON_CLOSEに変えてウィンドウを閉じたらvmも終わりにする. panel(layout:new BorderLayout()){ value=label(text:"0",constraints:BorderLayout.CENTER) //buttonのactionPerformedの中で使うのでlabelにvalueと名前をつける panel(constraints:BorderLayout.SOUTH) { button(text:'inc', actionPerformed:{value.text=Integer.toString(value.text.toInteger()+1)}) button(text:'dec', actionPerformed:{value.text=Integer.toString(value.text.toInteger()-1)}) } } } view.show() //end
こんな画面になる.
GroovyはJavaと異なり,クラスは任意である.クラスを定義した場合は,クラス名とファイル名を合わせる必要があるが,定義しない場合は適当な名前をつけてかまわない.ここではg1.groovyとなっている.
ボタンを押した際に行う処理内容は,buttonのactionPerformedにクロージャとして指定している.actionPerformedのクロージャには別関数を指定することも可能である.
//g1.groovy import groovy.swing.SwingBuilder import java.awt.BorderLayout builder=new SwingBuilder() view=builder.frame(defaultCloseOperation:javax.swing.WindowConstants.EXIT_ON_CLOSE, size:[200,100]){ panel(layout:new BorderLayout()){ value=label(text:"0",constraints:BorderLayout.CENTER) panel(constraints:BorderLayout.SOUTH) { button(text:'inc', actionPerformed:{action(it)}) //別関数actionを指定 button(text:'dec', actionPerformed:{action(it)}) //別関数actionを指定 } } } view.show() def void action(event){ actions=['inc':{value.text=Integer.toString(value.text.toInteger()+1)}, 'dec':{value.text=Integer.toString(value.text.toInteger()-1)}] actions[event.actionCommand]() } //end
ほぼ同じ画面をJava+AWTで作成すると以下のようになる.単純なプログラムを書換えよう(java編)のソースコードの一部である.
public View(){ Frame frame=new Frame(); Panel buttons=new Panel(); Button inc=new Button("inc"); Button dec=new Button("dec"); buttons.add(inc); buttons.add(dec); inc.addActionListener(this); dec.addActionListener(this); frame.add(buttons,BorderLayout.SOUTH); frame.add(value,BorderLayout.CENTER); frame.addWindowListener(this); frame.pack(); frame.show(); }
こんな画面になる.