写点什么

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

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

关注

评论

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

线上观看人次近 2 万,龙蜥社区走进中兴通讯 MeetUp 圆满结束

OpenAnolis小助手

开源 AI 操作系统 龙蜥社区 龙蜥meetup

从批到流,Zoom 基于 DolphinScheduler 的流批统一调度系统演进

白鲸开源

开源 大数据任务调度 Zoom 视频会议 Apache DolphinScheduler

软件工程3.0时代,为什么人工测试仍必不可少?

禅道项目管理

人工智能 AI 自动化测试

从 0 到 1 学 AI 大模型接入(Go/Java 实战)

王中阳Go

AI

MyEMS开源能源管理系统核心代码解读017

开源能源管理系统

开源 代码解读 能源管理系统

CST的UAV无人机RCS:双站, TLM求解器,各向异性Thin Panel,碳纤维复合材料CFRP,

思茂信息

无人机 CST Studio Suite TLM求解器 PEC

CORE漏洞赏金计划:携手社区共筑安全防线

qife122

智能合约 区块链安全

图谱不是玄学:时序数据库 TDengine 一步接入 Ontop,让时序数据更聪明

TDengine

tdengine 时序数据库 时序数据库tdengine

【HarmonyOS 5】鸿蒙App,Application,Ability以及页面和组件生命周期函数

GeorgeGcs

大数据-48 Redis 深入理解Redis通信机制:从RESP协议到Reactor事件驱动模型

武子康

Java redis 大数据 缓存 分布式

中烟创新智能稽核平台:为烟草行业定制的数字化风控引擎

中烟创新

零碳园区:绿色发展新引擎,MyEMS 助力启航

开源能源管理系统

开源 能源管理系统 国能国标

(在线CAD插件)WEB CAD二开形位公差标注

WEB CAD SDK

网页CAD 在线CAD

FlagRelease上线:自动迁移发布大模型多芯高效版本,用户下载即用

智源研究院

开源 大模型

Manus“跑路”风波背后,AI Agent的商业化困局

脑极体

AI

三角洲护航代练系统架构设计,基于WebSocket的实时护航通信系统实现

DUOKE七七

vue.js uniapp thinkphp6

系统化解析超智融合算力中心的搭建路径 | 干货推荐

OpenAnolis小助手

操作系统 算力 龙蜥社区 龙蜥大讲堂 超智融合

开源能源管理系统应用指南

开源能源管理系统

开源 生产 能源管理系统 国能国标

快手 AutoThink 大模型 KAT-V1 正式开源,40B版本比肩满血版R1,技术报告全公开!

快手技术

开源 大模型

采购那些事儿,如何把握性价比采购逻辑?

积木链小链

数字化转型 智能制造 采购管理

AI、大模型如何重塑海外舆情监测行业

沃观Wovision

人工智能、 海外舆情监控 AI 大模型 沃观Wovision 舆情监测系统

RISC-V基金会Datacenter SIG月会圆满举办,探讨RAS、PMU性能分析实践和经验

OpenAnolis小助手

操作系统 risc-v 龙蜥社区 Datacenter SIG 龙蜥 RISC-V SIG

龙蜥邀您参加 2025 开放原子开源生态大会

OpenAnolis小助手

操作系统 龙蜥社区 开放原子开源生态大会

LazyLLM教程 | 第1讲:RAG原理解读:让检索增强生成不再是黑盒

商汤万象开发者

AI 教程 agent LLM

京东商品详情API响应数据解析

tbapi

京东商品详情接口 京东商品详情API 京东数据采集 京东数据分析

京东商品列表API响应数据解析

tbapi

京东商品列表数据采集 京东商品列表接口 京东商品列表API 京东数据分析

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