写点什么

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

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

关注

评论

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

原来 TinyVue 组件库跨框架(Vue2、Vue3、React、Solid)是这样实现的?

OpenTiny社区

开源 Vue 前端 React SOLID

item_search_pro-高级关键字搜索淘宝商品api接口

技术冰糖葫芦

API 文档

api如何使用淘宝API接口获取店铺的所有商品

技术冰糖葫芦

API 文档

为什么用 iVX 开发程序更快?快在哪里?

代码生成器研究

如何理解低代码开发工具?

树上有只程序猿

低代码 应用开发 JNPF

无/低代码等于BPM吗?

代码生成器研究

OpenAI“政变”进行时,“百模大战”接下来该战什么?

脑极体

AI

2024年10大比特币以太坊钱包排行测评推荐

股市老人

「X」Embedding in NLP|初识自然语言处理(NLP)

Zilliz

nlp NLP 大模型 Milvus Zilliz

通过AppLink把拼多多热门榜单商品同步至小红书

谷云科技RestCloud

APPlink

IoTDB Summit,12 月 3 日北京等你 | 专属马克杯免费获得

Apache IoTDB

从大模型到内容生成,初窥门径的AI新次元

阿里云CloudImagine

云计算 视频云 AIGC

全栈程序员太难了,这个报表工具别再错过了!!

秃头小帅oi

程序员 前端 后端 低代码 全栈

软件测试/人工智能|使用ChatGPT帮我们绘制产品架构图

霍格沃兹测试开发学社

软件测试/人工智能|述职报告头很大,ChatGPT来帮你

霍格沃兹测试开发学社

软件测试/人工智能|利用ChatGPT写一份不一样的简历

霍格沃兹测试开发学社

终于搞明白ChatGPT是个什么玩意

Geek_ccdd7f

ChatGPT, FastGPT

LED Driver数码屏应用解决方案

芯动大师

为什么说低代码是编程初学者的理想选择。

代码生成器研究

什么才是真正的低代码平台?

代码生成器研究

Oracle实时同步技术

谷云科技RestCloud

oracle ETL CDC

开源流程设计器的对比与选型

小狗围观科幻

鸿蒙系统明年将不再适配安卓

不在线第一只蜗牛

鸿蒙 安卓 HarmonyOS

inBuilder低代码平台新特性推荐-第九期

inBuilder低代码平台

低代码

HDD行业沙龙举办,火火兔、看护家、乐普健康官宣开发鸿蒙原生应用

最新动态

以色列企业浏览器 Talon,成立 2 年卖了 45 亿,国内安全浏览器看到曙光了?

连续创业的Janky

数据安全 安全浏览器 企业浏览器 数影星球 数影企业浏览器

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