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

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


          運(yùn)行結(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 山風(fēng)小子 閱讀(6154) 評(píng)論(17)  編輯  收藏 所屬分類: Groovy & Grails
          主站蜘蛛池模板: 江源县| 邯郸县| 米林县| 广平县| 惠来县| 阿拉善盟| 苍山县| 武功县| 旬邑县| 巫溪县| 屯留县| 佛教| 玉门市| 宣化县| 略阳县| 仙游县| 宝清县| 个旧市| 嵊泗县| 华坪县| 扎鲁特旗| 金阳县| 榆树市| 六枝特区| 永泰县| 沐川县| 芷江| 大悟县| 嘉黎县| 乌鲁木齐市| 灯塔市| 定安县| 科技| 江山市| 天门市| 西平县| 江门市| 平远县| 郓城县| 南昌市| 浙江省|