速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

文心一言 VS 讯飞星火 VS chatgpt (171)-- 算法导论13.2 4题

福大大架构师每日一题

福大大架构师每日一题

华秋获深圳市福田区2023年职工“五小”创新与质量技术成果竞赛二等奖

华秋电子

物联网 新能源

元器件经验分享-晶体与晶振对比分析

华秋电子

供应链 元器件

Mac电脑自动化任务软件:Hitek Software Automize Enterprise激活最新版

胖墩儿不胖y

Mac软件 任务管理器 自动化任务管理工具

百度搜索&金融:构建高时效、高可用的分布式数据传输系统

百度Geek说

分布式 计算机网络 金融 数据传输 企业号 1 月 PK 榜

支持向量机(SVM)是什么?

小齐写代码

docker篇-重启策略+run容器常用参数

百度搜索:蓝易云

Docker 云计算 Linux 运维 云服务器

Java之Javac、JIT、AOT之间的关系

百度搜索:蓝易云

Java Linux 云服务器 AOT javac

数据高速公路:详解数仓集群通信技术

华为云开发者联盟

大数据 后端 华为云 华为云开发者联盟 华为云GaussDB(DWS)

制造业工厂仓库管理为什么要扫码出入库?

万界星空科技

wms WMS仓库管理 万界星空科技 仓库管理系统 扫码出入库管理

shopee虾皮商品列表数据接口(Shopee.item_search)丨shopee虾皮API接口

tbapi

Shopee shopee API shopee商品列表数据接口 虾皮商品列表数据接口 虾皮API接口

2023年12月全国范围POI数据更新《POI数据更新系列》

Geek_f9782a

GIS POI 地理空间数据

如何查找iPhone中所有的应用程序

雪奈椰子

如何对APP进行安全加固

叮咚!融云 2023 年度「消息」已送达

融云 RongCloud

技术 即时通讯 IM 融云 通讯

解读 $mash 通证 “Fair Launch” 规则,将公平发挥极致

大瞿科技

2024了,我不想再用AOP收集业务操作日志了 | 京东云技术团队

京东科技开发者

PCB设计必备:31条布线技巧

华秋电子

PCB设计 dfm

自动 FTP 客户端 Hitek Software AbleFTP激活最新版

mac大玩家j

文件传输软件 ftp工具

Spring 七种事务传播性介绍

vivo互联网技术

spring 事务的传播性 事务的提交和回滚

重磅国赛开赛!中国大学生服务外包创新创业大赛飞桨双赛道开放报名

飞桨PaddlePaddle

飞桨 高校 国赛 文心一言 文心大模型

SD-WAN搭建企业多云专用网络

Ogcloud

网络 SD-WAN 组网 组网网络

tiktok云手机有用吗?用哪个好?

Ogcloud

云服务 TikTok 手机云服务 云服务商

Beyond the WiFi Edge: Analyzing the Network Differences of IPQ4019 and IPQ6018

wallysSK

跨周期,创未来!华秋喜获中国产业互联网十周年-杰出企业

华秋电子

产业互联网 产业链 产业生态

简单聊聊大力发展国产堡垒机的几个原因

行云管家

网络安全 信创 堡垒机 国产化

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