First they ignore you
          then they ridicule you
          then they fight you
          then you win
              -- Mahatma Gandhi
          Chinese => English     英文 => 中文             
          隨筆-221  評論-1047  文章-0  trackbacks-0
          最近一直很忙,為了放松放松,自己就用Groovy寫了個計算器玩玩,順便也給還不太了解Groovy中SwingBuilder的朋友展示一下SwingBuilder的用法。

          注意:請使用最新版本的Groovy,否則顯示有問題


          運行結果:



          /*
          ?*?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 山風小子 閱讀(6150) 評論(17)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 临安市| 册亨县| 连南| 驻马店市| 湄潭县| 常山县| 桑日县| 获嘉县| 安塞县| 桂阳县| 新民市| 清新县| 巴青县| 八宿县| 阿克陶县| 五大连池市| 米易县| 利川市| 义马市| 博兴县| 建湖县| 徐水县| 台中县| 桂平市| 池州市| 北宁市| 台江县| 永州市| 马边| 焦作市| 四子王旗| 忻州市| 金山区| 都匀市| 泽州县| 濉溪县| 汨罗市| 鄂托克前旗| 花垣县| 楚雄市| 观塘区|