加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy笔记(10)_Swing界面

发布时间:2020-12-14 17:06:13 所属栏目:大数据 来源:网络整理
导读:构造器 ? ? 1、可以生成XML/HTML/SWING等嵌套树状数据结构 2、在语法级别上实现GOF的Builder设计模式? NodeBuilder????? 创建嵌套的节点树 DomBuilder?????? 创建W3C DOM树 SwingBuilder???? 创建Swing界面 AntBuilder???????? 生成ANT脚本 MarkupBuilder???

构造器

?

?

1、可以生成XML/HTML/SWING等嵌套树状数据结构

2、在语法级别上实现GOF的Builder设计模式?

  • NodeBuilder????? 创建嵌套的节点树
  • DomBuilder?????? 创建W3C DOM树
  • SwingBuilder???? 创建Swing界面
  • AntBuilder???????? 生成ANT脚本
  • MarkupBuilder???创建XML或HTML标记

?

MarkupBuilder Demo

?

1、Demo

import groovy.xml.*

//创建生成器

def page = new MarkupBuilder()

//使用伪方法html/head等,参数是闭包

page.html{

?? head{title 'Hello'}

?? body{

????? ul{

?????????? for(count in 1..3){

??????????????? li "clat $count"

???????????}?

?????? }

?? }

}

?

?

SwingBuilder构造GUI

?

1、Demo

import groovy.swing.SwingBuilder

import javax.swing.*

//创建生成器

def sb = new SwingBuilder()

//使用伪方法产生界面

def frame = sb.frame(title:'ToyStore',location:[100,100],

????????????????????????????????? size:[400,300],defaultCloSEOperation:

??????????????????????????????????? WindowConstants.EXIT_ON_CLOSE){

??????????????????????????????????????? ?label(text:"Hello world")?????????//?修改此行重构?,在frame中建立了一个标签

??????????????????? }

frame.pach()

frame.setVisible(true)

//Swing 的伪方法改为大写,再在前面加上J,就是相应组件了

?

1、更好的组织代码

def sb = new SwingBuilder()

def mainPanel = {

??? sb.panel(layout:new GridLayout(2,2,5,5)){

??????? label(text:'Last name:',horizontalAlignment : JLabel.RIGHT) //右对齐

????????? textField(text:'',columns:10) //输入框

??????? label(text:'First name:',horizontalAlignment: JLabel.RIGHT)

????????? textField(text:'',columns:10)

??? }

}

def frame = sb.frame(title:'ToysStore',location :[100,

???????????????????????????????????size:[400,defaultCloSEOperation:WindowConstants.EXIT_ON_CLOSE){

???????????????????????????????????????? mainPanel()????? //调用闭包

??????????????????????????????? }

frame.pack()

frame.setVisible(true)

?

?

布局与事件处理

?

1、

def buttonPanel = {

??? sb.panel(constraints : BorderLayout.SOUTH){

????????? button(text:'OK',actionPerformed:{ println 'OK pressed'})

????????? button(text:'Cancel',actionPerformed:{println 'Cancel pressed'})

??? }????

}

def mainPanel ={

?? sb.panel(layout : new BorderLayout()){

????? label(text:'Is this OK?',horizontalAlignment : JLabel.CENTER,

????????????? constraints : BorderLayout.CENTER)

??????? buttonPanel()??

???}

}

def frame = sb.frame(title:'ToysStore',location:[100,size:[400,

????????????????????????????????? defaultCloSEOperation: WindowConstants.EXIT_ON_CLOSE){mainPanel()}

frame.pack(); frame.setVisible(true)

?

?

?

BoxLayout

?

1、建立4个横向排列的按钮

import groovy.swing.SwingBuidler

import javax.swing.*

import java.awt.*

class FixedButton extends JButton{ // 使按钮大小固定

??? Dimension getMinimumSize(){return BUTTONSIZE}

??? Dimension getMaximunSize(){return BUTTONSIZE}

??? Dimension getPreferredSize(){return BUTTONSIZE}

??? private static final BUTTONSIZE = new Dimension(80,30)

}

def sb = new SwingBuilder()

def mainPanel = {

?? sb.panel(layout:new BorderLayout()){

???? hbox(constraints: BorderLayout.WEST){ // hbox可以换成vbox,变成纵向排列

???????? def buttons = ['One','Two','Three','Four']

?????????buttons.each{but -> sb.widget(new FixedButton(text: but))}

???? }

?? }

}

}

def frame = sb.frame(title: 'Example 10',300]

???????????????????????????????????,defaultCloSEOperation: WindowConstants.EXIT_ON_CLOSE){mainPanel()}

frame.pack() ; frame.setVisible(true)

?

?

?

JList/JScrollPane

?

1、selection

import groovy.swint.SwingBuilder

import javax.swing.*

import java.awt.*

class ToyListModel extends DefaultListModel{

??? ToyListModel(list){ super()

????list.each{item -> this.addElement(item)}?? // 列表添加到模型中

}}

def sb = new SwingBuilder()

def listPanel={

???? sb.panel(constraints: BorderLayout.CENTER){

????????? scrollPane(){? // 加入滚动条

????????????????def toyList = ['toy1','toy2','toy3','toy4']

????????????????toysList = list(model : new ToyListModel(toylist),????? //定义列表

??????????????????????????????selectionMode: ListSelectionModel.SINGLE_SELECTION,

??????????????????????????????selectedIndex: 0,visbleRowCount:4)

?????????? }

?????}

}

?

?

2、

def mainPanel = {

?? sb.panel(layout: new BorderLayout()){

?????? listPanel()

?? }

}

def fram = sb.frame(title : 'ToyStore',

??????????????????????????????? size:[400,defaultCloSEOperation:WindowConstants.EXIT_ONT_CLOSE){

?????????????????????????????????? mainPanel()

}

?

?

?

JTable/JScrollPane

?

1、表格

import ....同上

import java.swing.table.*

?

def sb = new SwingBuilder()

def tablePanel?= {

???? sb.panel(constrains: BorderLayout.CENTER){

??? ?? scrollPane(){

?????????? table(selectionMode: ListSelectionModel.SINGLE_SELECTION){

????????????????def toysList = [[toyName:'toy1',unitPrice: '100'],

????????????????????????????????????????[toyName :'toy2',unitPrice:'200']]

????????????????tableModel(list:toysList){

???????????????????? closureColumn(header: 'Toy Name',read :{row ->return row.toyName})? //指定列

???????????????????? closureColumn(header: 'Unit Price',read:{row -> return row.unitPrice}))

??????????????? }

?????????? }

???? ??}

}

}

2、然后可以像上面一样,添加Jframe框架 。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读