最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

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

关注

评论

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

倒计时丨距离RestCloud新品发布仅有6天!

RestCloud

突破性的多语言代码大模型基CodeShell:引领AI编程新时代

汀丶人工智能

人工智能 自然语言处理 多模态大模型

公链开发

西安链酷科技

公链开发 公链团队

INFINI Labs 产品更新 | Agent 全新重构,优化指标采集,支持集中配置管理,支持动态下发等功能

极限实验室

console agent loadgen INFINI Labs 极限科技

低代码开发,一场深度的IT效率革命

高端章鱼哥

低代码 JNPF IT开发

iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法

雪奈椰子

区块链挖矿是怎么挖的?区块链挖矿有几种方式?

西安链酷科技

云算力挖矿源码

提升团队合作效率,这10款可视化协作软件值得拥有!

彭宏豪95

团队协作 软件推荐 科技 在线白板 协同办公软件

pi币商城开发 公链项目开发 dapp开发公司

西安链酷科技

土地元宇宙类链游开发、区块链游戏开发

西安链酷科技

元宇宙游戏

第25期 | GPTSecurity周报

云起无垠

免费算力部署stable-diffusion

打工人!

Stable Diffustion

流动性挖矿系统开发 lp矿池挖矿定制、双币模式质押挖矿

西安链酷科技

公链开发技术和成本

西安链酷科技

公链开发

云智慧联合北航提出智能运维(AIOps)大语言模型及评测基准

云智慧AIOps社区

大模型 人工智能「 运维‘ LLM模型

从科幻走向现实,LLM Agent 做到哪一步了?

Zilliz

Python 包管理器入门指南

小万哥

Python 程序员 软件 后端 开发

公链开发技术团队

西安链酷科技

公链开发

火热的低代码平台

树上有只程序猿

低代码平台

制造行业数字化运维破局之道

云智慧AIOps社区

Vert.x 教程 (三):Vertx 应用的Operation

Kevin_913

什么是Vim,Vim安装

二哈侠

强大日志查看器,助力数据联动分析

观测云

数据分析 日志分析 关联分析

AIGC | 如何用“Flow”,轻松解决复杂业务问题

极光JIGUANG

Linux网络、进程详解。

百度搜索:蓝易云

云计算 Linux 运维 云服务器 ECS

SRM招标采购系统:功能详解及源码获取

金陵老街

朝夕光年游戏高光全套解决方案

字节跳动技术范儿

字节跳动 游戏开发

原来你是这样的英特尔:全面解读英特尔产业故事

E科讯

免费算力部署ChatGLM3-6B大语言模型

打工人!

大模型

Ubuntu22.04系统搭建环境编译AOSP?

百度搜索:蓝易云

android Linux ubuntu 运维 AOSP

如何将极狐GitLab 漏洞报告导出为 HTML 或 PDF 格式或导出到 Jira

极狐GitLab

gitlab 安全 bug Jira 漏洞检测

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