Groovy笔记(10)_Swing界面

<p><span style="font-size: medium;"><strong>构造器</strong></span></p>
<p></p>
<p></p>
<p>1、可以生成XML/HTML/SWING等嵌套树状数据结构</p>
<p>2、在语法级别上实现GOF的Builder设计模式</p>
<ul>
<li>NodeBuilder 创建嵌套的节点树</li>
<li>DomBuilder 创建W3C DOM树</li>
<li>SwingBuilder 创建Swing界面</li>
<li>AntBuilder 生成ANT脚本</li>
<li>MarkupBuilder创建XML或HTML标记</li>
</ul>
<p></p>
<p><span style="font-size: medium;"><strong>MarkupBuilder Demo</strong></span></p>
<p></p>
<p>1、Demo</p>
<p>import groovy.xml.*</p>
<p>//创建生成器</p>
<p>def page = new MarkupBuilder()</p>
<p>//使用<span style="color: #ff0000;">伪方法</span>html/head等,参数是闭包</p>
<p>page.<span style="color: #0000ff;">html</span>{</p>
<p> <span style="color: #0000ff;">head</span>{<span style="color: #ff0000;">title</span> 'Hello'}</p>
<p> <span style="color: #0000ff;">body</span>{</p>
<p> <span style="color: #0000ff;">ul</span>{</p>
<p> for(count in 1..3){</p>
<p> <span style="color: #ff0000;">li</span> "clat $count"</p>
<p>} </p>
<p> }</p>
<p> }</p>
<p>}</p>
<p><textarea cols="50" rows="15" name="code" class="xhtml:collapse:showcolumns"><html>
<head>
<title>Hello</title>
</head>
<body>
<ul>
<li>clat1</li>
<li>clat2</lt>
<li>clat3</lt>
</ul>
</body>
</html></textarea></p>
<p></p>
<p></p>
<p><span style="font-size: medium;"><strong>SwingBuilder构造GUI</strong></span></p>
<p></p>
<p>1、Demo</p>
<p>import groovy.swing.SwingBuilder</p>
<p>import javax.swing.*</p>
<p>//创建生成器</p>
<p>def sb = new SwingBuilder()</p>
<p>//使用伪方法产生界面</p>
<p>def frame = sb.<span style="color: #0000ff;">frame</span>(<span style="color: #ff0000;">title</span>:'ToyStore' , <span style="color: #ff0000;">location</span>:[100,100],</p>
<p> <span style="color: #ff0000;">size</span>:[400,300],<span style="color: #ff0000;">defaultCloseOperation:</span></p>
<p><span style="color: #0000ff;"> </span>WindowConstants.EXIT_ON_CLOSE){</p>
<p> <span style="color: #0000ff;">label</span>(text:"Hello world")//修改此行重构,在frame中建立了一个标签</p>
<p> }</p>
<p>frame.pach()</p>
<p>frame.setVisible(true)</p>
<p>//Swing 的伪方法改为大写,再在前面加上J,就是相应组件了</p>
<p></p>
<p>1、更好的组织代码</p>
<p>def sb = new SwingBuilder()</p>
<p>def <span style="color: #ff0000;">mainPanel</span> = {</p>
<p> sb.panel(layout:new GridLayout(2,2,5,5)){</p>
<p> label(text:'Last name:' , horizontalAlignment : JLabel.RIGHT) //右对齐</p>
<p> textField(text:'', columns:10) //输入框</p>
<p> label(text:'First name:' , horizontalAlignment: JLabel.RIGHT)</p>
<p> textField(text:'' , columns:10)</p>
<p> }</p>
<p>}</p>
<p>def frame = sb.frame(title:'ToysStore' ,location :[100,100],</p>
<p>size:[400,300],defaultCloseOperation:WindowConstants.EXIT_ON_CLOSE){</p>
<p> <span style="color: #ff0000;">mainPanel() //调用闭包</span></p>
<p> }</p>
<p>frame.pack()</p>
<p>frame.setVisible(true)</p>
<p></p>
<p></p>
<p><span style="font-size: medium;"><strong>布局与事件处理</strong></span></p>
<p></p>
<p>1、</p>
<p>def <span style="color: #ff0000;">buttonPanel</span> = {</p>
<p> sb.panel(constraints : BorderLayout.SOUTH){</p>
<p> button(text:'OK',actionPerformed:{ println 'OK pressed'})</p>
<p> button(text:'Cancel',actionPerformed:{println 'Cancel pressed'})</p>
<p> }</p>
<p>}</p>
<p>def <span style="color: #ff0000;">mainPanel</span> ={</p>
<p> sb.panel(layout : new BorderLayout()){</p>
<p> label(text:'Is this OK?' , horizontalAlignment : JLabel.CENTER, </p>
<p> constraints : BorderLayout.CENTER)</p>
<p> <span style="color: #ff0000;">buttonPanel</span>()</p>
<p>}</p>
<p>}</p>
<p>def frame = sb.frame(title:'ToysStore',location:[100,100] ,size:[400,300],</p>
<p> defaultCloseOperation: WindowConstants.EXIT_ON_CLOSE){<span style="color: #ff0000;">mainPanel</span>()}</p>
<p>frame.pack(); frame.setVisible(true)</p>
<p></p>
<p></p>
<p></p>
<p><span style="font-size: medium;"><strong>BoxLayout</strong></span></p>
<p><span style="font-size: medium;"><strong></strong></span></p>
<p>1、建立4个横向排列的按钮</p>
<p>import groovy.swing.SwingBuidler</p>
<p>import javax.swing.*</p>
<p>import java.awt.*</p>
<p>class <span style="color: #ff0000;">FixedButton</span> extends JButton{ // 使按钮大小固定</p>
<p> Dimension getMinimumSize(){return BUTTONSIZE}</p>
<p> Dimension getMaximunSize(){return BUTTONSIZE}</p>
<p> Dimension getPreferredSize(){return BUTTONSIZE}</p>
<p> private static final BUTTONSIZE = new Dimension(80,30)</p>
<p>}</p>
<p>def sb = new SwingBuilder()</p>
<p>def <span style="color: #ff0000;">mainPanel</span> = {</p>
<p> sb.panel(layout:new BorderLayout()){</p>
<p> <span style="color: #ff0000;">hbox</span>(constraints: BorderLayout.WEST){ // hbox可以换成vbox,变成纵向排列</p>
<p> def buttons = ['One','Two','Three','Four']</p>
<p>buttons.each{but -> sb.widget(new FixedButton(text: but))}</p>
<p> }</p>
<p> }</p>
<p>}</p>
<p>}</p>
<p>def frame = sb.frame(title: 'Example 10' ,location:[100,100],size:[400,300]</p>
<p> ,defaultCloseOperation: WindowConstants.EXIT_ON_CLOSE){<span style="color: #ff0000;">mainPanel</span>()}</p>
<p>frame.pack() ; frame.setVisible(true)</p>
<p></p>
<p></p>
<p></p>
<p><span style="font-size: medium;"><strong>JList/JScrollPane</strong></span></p>
<p></p>
<p>1、selection</p>
<p>import groovy.swint.SwingBuilder</p>
<p>import javax.swing.*</p>
<p>import java.awt.*</p>
<p>class ToyListModel extends <span style="color: #ff0000;">DefaultListModel</span>{</p>
<p> ToyListModel(list){ super()</p>
<p><span style="color: #ff0000;">list.each{item -> this.addElement(item)} // 列表添加到模型中</span></p>
<p>}}</p>
<p>def sb = new SwingBuilder()</p>
<p>def <span style="color: #ff0000;">listPanel</span>={</p>
<p> sb.panel(constraints: BorderLayout.CENTER){</p>
<p> <span style="color: #ff0000;">scrollPane</span>(){ // 加入滚动条</p>
<p>def toyList = ['toy1','toy2','toy3','toy4']</p>
<p>toysList = <span style="color: #ff0000;">list</span>(model : new <span style="color: #ff0000;">ToyListModel</span>(toylist), //定义列表 </p>
<p>selectionMode: ListSelectionModel.SINGLE_SELECTION,</p>
<p>selectedIndex: 0 ,visbleRowCount:4)</p>
<p> }</p>
<p>}</p>
<p>}</p>
<p></p>
<p></p>
<p>2、</p>
<p>def <span style="color: #ff0000;">mainPanel</span> = {</p>
<p> sb.panel(layout: new BorderLayout()){</p>
<p> <span style="color: #ff0000;">listPanel</span>()</p>
<p> }</p>
<p>}</p>
<p>def fram = sb.<span style="color: #ff0000;">frame</span>(title : 'ToyStore' ,location :[100,100],</p>
<p> size:[400,300],defaultCloseOperation:WindowConstants.EXIT_ONT_CLOSE){</p>
<p> <span style="color: #ff0000;">mainPanel</span>()</p>
<p>}</p>
<p></p>
<p></p>
<p></p>
<p><span style="font-size: medium;"><strong>JTable/JScrollPane</strong></span></p>
<p></p>
<p>1、表格</p>
<p>import ....同上</p>
<p>import java.swing.table.*</p>
<p></p>
<p>def sb = new SwingBuilder()</p>
<p>def <span style="color: #ff0000;">tablePanel</span>= {</p>
<p> sb.<span style="color: #ff0000;">panel</span>(constrains: BorderLayout.CENTER){</p>
<p> <span style="color: #ff0000;">scrollPane</span>(){</p>
<p> <span style="color: #ff0000;">table</span>(selectionMode: ListSelectionModel.SINGLE_SELECTION){</p>
<p>def toysList = [[toyName:'toy1' , unitPrice: '100'],</p>
<p>[toyName :'toy2', unitPrice:'200']]</p>
<p><span style="color: #ff0000;">tableModel</span>(list:toysList){</p>
<p> <span style="color: #ff0000;">closureColumn</span>(header: 'Toy Name' ,read :{row ->return row.toyName}) //指定列</p>
<p> <span style="color: #ff0000;">closureColumn</span>(header: 'Unit Price',read:{row -> return row.unitPrice}))</p>
<p> }</p>
<p> }</p>
<p> }</p>
<p>}</p>
<p>}</p>
<p>2、然后可以像上面一样,添加Jframe框架 。</p>
<p></p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值