Movatterモバイル変換


[0]ホーム

URL:


BT

InfoQ Software Architects' Newsletter

A monthly overview of things you need to know as an architect or aspiring architect.

View an example

We protect your privacy.

QCon London (March 16-19, 2026): Gain actionable insights & strategic perspectives to tackle complex enterprise challenges. Register

Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ

Unlock the full InfoQ experience

Unlock the full InfoQ experience by logging in! Stay updated with your favorite authors and topics, engage with content, and download exclusive resources.

Log In
or

Don't have an InfoQ account?

Register
  • Stay updated on topics and peers that matter to youReceive instant alerts on the latest insights and trends.
  • Quickly access free resources for continuous learningMinibooks, videos with transcripts, and training materials.
  • Save articles and read at anytimeBookmark articles to read whenever youre ready.

Topics

Choose your language

InfoQ HomepageNewsWiki-style GUI Layout with Profligacy and LEL

Wiki-style GUI Layout with Profligacy and LEL

Jul 13, 20071min read

Write for InfoQ

Feed your curiosity.Help 550k+ global
senior developers
each month stay ahead.
Get in touch
Creating GUI layouts has been a problem for Java ever since the first AWT release. Many LayoutManagers have since been created, but none of them completely solved the issues with coding the layouts by hand. In fact, the recent addition,GroupLayout, is well suited to be configured by GUI builders like Matisse.

The latest attempt at a solution uses JRuby. Zed Shaw, creator ofMongrel, created a JRuby GUI library calledProfligacy (InfoQreported about JRuby GUI libraries Profligacy, Cheri and Swiby). It includesLayout Expression Language (LEL) which aims to tackle the GUI layout problem.

LEL uses a Wiki-style formatting language to define the layout as text. This makes the layout specification a compact string, instead of many lines of code specifying constraints or setting up hierarchies of panels. The language is parsed by a parser written using the Ruby libraryRagel.

A sample:
layout = "
[ label_1 | label3 ]
[ (300,300)*text1| (150)people ]
[ <label2 | _ ]
 [ message | buttons ]
"
This creates a layout decoupled from the creation of the actual components, by setting up named placeholders for the layout elements. Layout and components are then connected with a  bit of Ruby code:

ui = Swing::LEL.new(JFrame,layout) do |c,i|
c.label_1 = JLabel.new "The chat:"
c.label2 = JLabel.new "What you're saying:"
c.label3 = JLabel.new "The people:"
c.text1 = JTextArea.new
c.people = JComboBox.new
c.message = JTextArea.new
# we'll replace this later with a subcomponent
c.buttons = JPanel.new
end

The placeholders defined in the layout specification (label_1,text1, etc) are assigned concrete components by referring to their names, which is done using Ruby's metaprogramming features.

While there are other LayoutManagers that use the approach of text layout constraints, for instanceMigLayout, Profligacy and LEL show an interesting approach to help with GUI programming by using Ruby's features. LEL is not specific to a particular LayoutManager, although the current version usesGroupLayout to set up the GUI.

Rate this Article

Adoption
Style

The InfoQ Newsletter

A round-up of last week’s content on InfoQ sent out every Tuesday. Join a community of over 250,000 senior developers.View an example

We protect your privacy.

BT

[8]ページ先頭

©2009-2025 Movatter.jp