写点什么

使用 Profligacy 和 LEL 创建 Wiki 风格的 GUI 布局

  • 2007-07-13
  • 本文字数:941 字

    阅读完需:约 3 分钟

自从 AWT 面世以来,为 Java 创建 GUI 布局就成为了人们的一块心病,有许多 LayoutManager(布局管理器)因此应运而生,然而它们之中没有一个能够完全解决需要手动干预编写布局代码的问题。实际上,最近加入的GroupLayout颇为适用于在类似 Matisse 这样的 GUI Builder 进行配置。

最近,人们又把眼光投向了 JRuby。 Mongrel 创始人 Zed Shaw 创建了一套 JRuby GUI 类库,名为 Profligacy (在 InfoQ 刚刚推出的一篇报导中,我们就对JRuby GUI 类库Profligacy、Cheri 和Swiby 进行了介绍)。这套类库包含了布局表达式语言(Layout Expression Language,LEL),用于解决GUI 布局问题。

LEL 使用 Wiki 风格的格式化语言,以文本形式定义布局。这使得我们可以用一个简洁的字符串来描述布局规格,而不比长篇累牍编写很多行代码来指明约束或者创建面板层次结构。这门语言使用以 Ruby 类库 Ragel 编写的解析器进行解析。

示例代码如下:

layout = "<br></br> [ label_1 | label3 ]<br></br> [ (300,300)*text1| (150)people ]<br></br> [ <label2 | _ ]<br></br> [ message | buttons ]<br></br>"这段代码创建了一个布局,并以为布局元素建立命名占位符的方式,将布局从实际组件的创建中解耦出来。随后,我们使用下面一小段 Ruby 代码把布局和组件联系起来:

ui = Swing::LEL.new(JFrame, layout) do |c, i|<br></br> c.label_1 = JLabel.new "The chat:"<br></br> c.label2 = JLabel.new "What you're saying:"<br></br> c.label3 = JLabel.new "The people:"<br></br> c.text1 = JTextArea.new<br></br> c.people = JComboBox.new<br></br> c.message = JTextArea.new<br></br> # we'll replace this later with a subcomponent<br></br> c.buttons = JPanel.new<br></br>end定义在布局规格中的占位符(label_1text1等等)通过名称引用和相应的组件关联起来,这种方法使用了 Ruby 的元编程(metaprogramming)特性。

尽管还有不少其它的布局管理器使用文本布局约束的方式(比如说 MigLayout ),但 Profligacy 和 LEL 通过使用 Ruby 的特性,向人们展示辅助 GUI 编程的一种很有趣的方式。LEL 并不是专用于某个特定的布局管理器的,但当前的版本使用GroupLayout来创建 GUI。

查看英文原文: Wiki-style GUI Layout with Profligacy and LEL

2007-07-13 10:001222
用户头像

发布了 117 篇内容, 共 20.4 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

从分布式到微服务解密“架构”原理与实战笔记

小小怪下士

Java 程序员 分布式 微服务

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

BeeWorks

DevEco创建项目时的错误解决

路北路陈

6 月 优质更文活动

Web网页端IM产品RainbowChat-Web的v5.0版已发布

JackJiang

网络编程 即时通讯 IM

Java代码性能测试实战之ContiPerf

javalover123

单元测试 性能测试 压测 JUnit Java'

对线面试官-线程池(四)

派大星

Java 面试题

Navicat Premium将关系和实体添加到概念模型的方法

背包客

macos MySQL 数据库 Mac 软件 Navicat Premium

抓包分析RST信号

蓝胖子的编程梦

TCP Wireshark tcpdump RST 报文 Connection reset

KW 新闻 | KaiwuDB 亮相数字中国并发布离散制造场景解决方案

KaiwuDB

数字中国 KaiwuDB 离散制造业解决方案

NFTScan | 06.05~06.11 NFT 市场热点汇总

NFT Research

NFT 热点

电路板电镀中4种特殊的电镀方法

华秋PCB

经验 电路板 焊接 PCB板 电镀

揭秘Spring依赖注入和SpEL表达式

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

AIGC时代,设计软件应该做什么?丨AIGC X 企业服务

ToB行业头条

“敏捷教练进阶课程”7月22-23日 ·A-CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum

敏捷教练

Win服务器图床配置

路北路陈

6 月 优质更文活动

智慧生活垃圾焚烧发电厂Web3D可视化平台

2D3D前端可视化开发

物联网 数字孪生 三维可视化 工业组态 智慧垃圾焚烧发电厂

“数字创新产品课程”7月29-30日 · CSPO认证周末班【提前报名特惠】CST导师亲授

ShineScrum

3 个技巧,让你像技术专家一样解决编码问题

LigaAI

程序人生 技术专家 技术人成长 问题分析及解决 企业号 6 月 PK 榜

TCMalloc 技术细节详解

KaiwuDB

KaiwuDB TCMalloc

正式启动|2023中国高校计算机大赛—大数据挑战赛火热报名中!

云智慧AIOps社区

大数据 AI 算法 运维 智能运维

如何理解 REST 和 RPC 之间的差异?

Apifox

程序员 RPC Rest 协议 RPC调用

在百度生态用达人营销赋能品牌生意增长 | 度星选白皮书

说山水

精耕丝路,智胜全球 | 新华三助力中企跑好“出海”赛道

新消费日报

MySQL 8.0.29 instant DDL 数据腐化问题分析

GreatSQL

greatsql greatsql社区

参与赢大奖!阿里云机器学习平台PAI助力开发者激发AIGC潜能

阿里云大数据AI技术

阿里云 AIGC

科兴未来|2023”福地句才”海外人才创业大赛

科兴未来News

【零售电商系列】走进亚马逊之自建仓储&物流

小诚信驿站

6 月 优质更文活动

今年LED显示屏市场趋势

Dylan

商业 广告 娱乐 数字化 LED显示屏

源生创新 云享未来|GOTC全球开源技术峰会华为云云原生精彩时刻

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

Sentinel熔断降级的规则及实现原理

互联网架构师小马

Java sentinel 熔断降级

当GaussDB遇上了毕昇编译器

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

使用Profligacy和LEL创建Wiki风格的GUI布局_Java_Werner Schuster_InfoQ精选文章