InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Wiki-style GUI Layout with Profligacy and LEL

Posted by Werner Schuster on Jul 13, 2007

Sections
Development,
Architecture & Design
Topics
JRuby ,
Java ,
Domain Specific Languages ,
Ruby ,
Dynamic Languages
Tags
Swing ,
GUI ,
JRuby
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 of Mongrel, created a JRuby GUI library called Profligacy (InfoQ reported about JRuby GUI libraries Profligacy, Cheri and Swiby). It includes Layout 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 library Ragel.

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 instance MigLayout, 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 uses GroupLayout to set up the GUI.
Great by Michael Neale Posted
  1. Back to top

    Great

    by Michael Neale

    I think this is pretty neat !

    I think its a shame that something like this wasn't looked at by sun for JavaFX (I know there are plenty of other reasons for a new script - but still, it reeks of the dark days of Sun's Not Invented Here disease which they are just recovering from now).

    nice work !

Educational Content

New-age Transactional Systems - Not Your Grandpa's OLTP

John Hugg discusses high volume transaction processing applications with high and low frequency profiles, and how VoltDB can be used for that purpose.

Cool Code

Kevlin Henney examines code samples to see what can be learned from them starting from the premise that one won’t write great code unless he knows how to read it.

Collaboration: At the Extremities of Extreme

Jason Ayers share the observations he made watching a team of developers collaborating in real time on the same code base, pushing XP, pair programming and continuous integration to their extremes.

Yesod Web Framework

Michael Snoyman presents Yesod, a web framework written in Haskell and containing a web server, templating, ORM, libraries (templating, gravatar, etc.).

Transactions without Transactions

Richard Kreuter and Kyle Banker on how to avoid classical RDBMS transactional systems by using compensation mechanisms, transactional messaging or transactional procedures.

Attila Szegedi on JVM and GC Performance Tuning at Twitter

Attila Szegedi talks about performance tuning Java and Scala programs at Twitter: how to approach GC problems, the importance of asynchronous I/O, when to use MySQL/Cassandra/Redis, and much more.

10 tips on how to prevent business value risk

One category of risk that project teams need to ensure they address is business value failure – delivering a product that fails to provide value for the business investor.

Interview: Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives

InfoQ spoke to the authors of Software Systems Architecture on a couple of new topics, the System Context viewpoint and Agile, which have been added to the second edition.