写点什么

使用 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:00889
用户头像

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

关注

评论

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

存储大师班 | RDMA简介与编程基础

QingStor分布式存储

云原生 对象存储 分布式存储

统一服务门户,让运维不再成为“背锅侠”和“救火队”

BoCloud博云

架构实战营--模块一作业

小牧ah

架构实战营

靠着这份Java面试题跟答案,我从 14K 变成了 28K!

Java 程序员 架构 面试

【从零开始学爬虫】采集事业单位最新招聘信息

前嗅大数据

大数据 爬虫 数据采集 采集网页 采集招聘信息

《持之以恒的从事运动》四

Changing Lin

官宣!ElasticJob 3.0.0 版本正式发布

SphereEx

行业痛点今何在?产业安全专家共话云安全

腾讯安全云鼎实验室

云计算 云安全

架构师实战营模块一命题作业

郑立新

架构实战营

公安重点人员研判分析平台解决方案,智慧派出所

如何成长为高级工程师?

行者AI

模块一作业

hello

架构实战营

Apache Dubbo---- RPC通信

是老郭啊

dubbo Dubbo服务 RPC框架 Apache Dubbo Spring Dubbo

注册中心篇,欣赏阿里开源Nacos

下雨喽

Java 设计 nacos

5分钟速读之Rust权威指南(三十七)模式性质

wzx

rust

程序员考证有什么现实意义? | 话题讨论

happlyfox

话题讨论

那些年Android面试官常问的知识点,真香!

欢喜学安卓

android 程序员 面试 移动开发

蜕变中的B站:给各大自媒体平台带来那些启发

石头IT视角

有道互动内容引擎Ceramics的业务实践

有道技术团队

信息技术 web tech 网易有道

直播之变,5G为豹

脑极体

微进程:微服务中后台作业的一种新架构设计模式

白亦杨

微服务

JVM--垃圾回收算法

是老郭啊

JVM 垃圾回收机制 JVM垃圾回收原理

Cobar源码分析之AST

捉虫大师

sql AST cobar

深入理解搜索引擎——开篇

药老算法

数据挖掘 机器学习 搜索引擎 全文检索 向量检索

重磅!不容错过的阿里内部微服务速成手册也太赞了(2021版)

Java

模块一作业

王小森

架构实战营第一期--模块一作业

clay

架构实战营

🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(2)Jenkins实现自动化部署+自动化合并其他分支

洛神灬殇

jenkins CI/CD 7月日更

This post is all you need(①多头注意力机制原理)

月来客栈

深度学习 Transformer

被面试官问的Android问题难倒了,3面直接拿到offer

欢喜学安卓

android 程序员 面试 移动开发

【又是干货】史诗级漏洞挖掘的过程快get一下

网络安全学海

运维 网络安全 信息安全 渗透测试 漏洞修复

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