最近一直很忙,為了放松放松,自己就用Groovy寫了個計算器玩玩,順便也給還不太了解Groovy中SwingBuilder的朋友展示一下SwingBuilder的用法。
注意:請使用最新版本的Groovy,否則顯示有問題
運行結(jié)果:

/*
?*?Copyright?2007?the?original?author?or?authors.
?*?
?*?Licensed?under?the?Apache?License,?Version?2.0?(the?"License");
?*?you?may?not?use?this?file?except?in?compliance?with?the?License.
?*?You?may?obtain?a?copy?of?the?License?at
?*?
?*??????
http://www.apache.org/licenses/LICENSE-2.0
?*?
?*?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software
?*?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS,
?*?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.
?*?See?the?License?for?the?specific?language?governing?permissions?and
?*?limitations?under?the?License.
?
*/
package
?edu.ecust.swing
import
?groovy.swing.
*
import
?javax.swing.
*
import
?java.awt.
*
/**
?*?Groovy?Calculator?for?studying?SwingBuilder
?*?
?*?
@author
?Daniel?Sun(realbluesun@hotmail.com)
?*
?*?
@since
?0.1
?
*/
class
?GroovyCalculator?{
????def?swing?
=
?
new
?SwingBuilder()
????JFrame?frame
????def?toolkit?
=
?Toolkit.getDefaultToolkit()
????def?screenSize?
=
?toolkit.getScreenSize()
????
????
????def?WIDTH?
=
?
320
????def?HEIGHT?
=
?
200
????
int
?X?
=
?(screenSize.width?
-
?WIDTH)?
/
?
2
????
int
?Y?
=
?(screenSize.height?
-
?HEIGHT)?
/
?
2
????
????
boolean
?flag?
=
?
false
????
????
private
?
void
?run()?{
????????UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
????????frame?
=
?swing.frame(title:?
'
Demo
'
,
????????????????????????????size:?[WIDTH,?HEIGHT],
????????????????????????????location:?[X,?Y],
????????????????????????????defaultCloseOperation:?javax.swing.WindowConstants.DISPOSE_ON_CLOSE)?{
????????????
????????????
????????????panel(layout:?
new
?BorderLayout())?{
????????????????textField(id:?
"
expr
"
,?constraints:?BorderLayout.NORTH)
????????????????
????????????????panel(constraints:?BorderLayout.CENTER)?{
????????????????????tableLayout?{
????????????????????????tr?{
????????????????????????????td?{
????????????????????????????????button(text:
"
7
"
)?{
????????????????????????????????????action(getAction(
"
7
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
8
"
)?{
????????????????????????????????????action(getAction(
"
8
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
9
"
)?{
????????????????????????????????????action(getAction(
"
9
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
/
"
)?{
????????????????????????????????????action(getAction(
"
/
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????}
????????????????????????tr?{
????????????????????????????td?{
????????????????????????????????button(text:
"
4
"
)?{
????????????????????????????????????action(getAction(
"
4
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
5
"
)?{
????????????????????????????????????action(getAction(
"
5
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
6
"
)?{
????????????????????????????????????action(getAction(
"
6
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
*
"
)?{
????????????????????????????????????action(getAction(
"
*
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????}
????????????????????????tr?{
????????????????????????????td?{
????????????????????????????????button(text:
"
1
"
)?{
????????????????????????????????????action(getAction(
"
1
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
2
"
)?{
????????????????????????????????????action(getAction(
"
2
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
3
"
)?{
????????????????????????????????????action(getAction(
"
3
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
-
"
)?{
????????????????????????????????????action(getAction(
"
-
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????}
????????????????????????tr?{
????????????????????????????td?{
????????????????????????????????button(text:
"
0
"
)?{
????????????????????????????????????action(getAction(
"
0
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
=
"
)?{
????????????????????????????????????action(name:
"
=
"
,?closure:?
this
.
&
eval)
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
C
"
)?{
????????????????????????????????????action(name:
"
C
"
,?closure:?
this
.
&
clear)
????????????????????????????????}
????????????????????????????}
????????????????????????????td?{
????????????????????????????????button(text:
"
+
"
)?{
????????????????????????????????????action(getAction(
"
+
"
))
????????????????????????????????}
????????????????????????????}
????????????????????????}
????????????????????}
????????????????}
????????????}
????????}
????????
????????swing.expr.setEditable(
false
)
????????swing.expr.setHorizontalAlignment(JTextField.RIGHT)
????????swing.expr.setBackground(Color.WHITE)
????????
????????frame.pack()
????????frame.setResizable(
false
)
????????frame.setVisible(
true
)
????}
????
????
private
?
void
?append(EventObject?evt?
=
?
null
)?{
????????
if
?(flag)?{
????????????swing.expr.text?
=
?
""
????????????flag?
=
?
false
????????}
????????
????????String?name?
=
?evt.source.text
????????swing.expr.text?
<<=
?name
????????swing.expr.text?
=
?swing.expr.text.replaceAll(
"
//
"
,?
"
/
"
)
????}
????
????
private
?
void
?clear(EventObject?evt?
=
?
null
)?{
????????swing.expr.text?
=
?
""
????}
????
????
private
?
void
?eval(EventObject?evt?
=
?
null
)?{
????????String?expr?
=
?swing.expr.text
????????
????????def?b
=
?
new
?Binding()
????????def?conf
=
new
?org.codehaus.groovy.control.CompilerConfiguration()
????????conf.setSourceEncoding(
'
unicode
'
)
????????def?groovyShell?
=
?
new
?GroovyShell(b,conf)
????????
????????
try
?{
????????????swing.expr.text?
=
?groovyShell.evaluate(expr)
????????}?
catch
?(Throwable?t)?{
????????????swing.expr.text?
=
?
"
invalid?expression!
"
????????????flag?
=
?
true
????????}
????????
????}
????
????def?getAction(name)?{
????????
return
?swing.action(name:name,?closure:?
this
.
&
append)
????}
????
????
static
?
void
?main(args)?{
????????
new
?GroovyCalculator().run()
????}
}
附:
朝花夕拾——Groovy & Grails
posted on 2007-08-05 20:52
山風小子 閱讀(6152)
評論(17) 編輯 收藏 所屬分類:
Groovy & Grails