InfoQ

News

Wiki-style GUI Layout with Profligacy and LEL

Posted by Werner Schuster on Jul 13, 2007 10:00 AM

Community
Java,
Ruby
Topics
Domain Specific Languages ,
Dynamic Languages ,
JRuby
Tags
JRuby ,
GUI ,
Swing
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.

1 comment

Reply

Great by Michael Neale Posted Jul 16, 2007 1:52 AM
  1. Back to top

    Great

    Jul 16, 2007 1:52 AM 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 !

Exclusive Content

Diary of a Fence Sitting SOA Geek

In this presentation, Mark Little explains the history of SOAP/WSDL/WS-*-based web services and RESTful HTTP and highlights how the two approaches might converge into a single solution.

Flex for XML and JSON

Platforms need interoperability. In this article Flex interoperability with JSON and XML is explored including direct mapping to chart and grid components.

Measuring Agile in the Enterprise: 5 Success Factors for Large-Scale Agile Adoption

Michael Mah analyzes the development process in 5 companies: 2 Agile (one of them BMC) and 3 classic. He presents the factors which contributed to the success of BMC's Agile adoption.

Tom Preston-Werner on Powerset, GitHub, Ruby and Erlang

In this interview filmed at RubyFringe 2008, Tom Preston-Werner talks about how both Powerset and GitHub use Ruby and Erlang, as well as tools like Fuzed, god, and more.

David Laribee on Alt.NET and its Mission

David Laribee discusses the purpose of ALT.NET, its mission and future.

Discover RailsKits and Stop Writing Redundant Code

Ruby on Rails has become a popular Ruby framework for creating web applications in recent years. An aspect of creating a web application is the need to repeatedly create the same base functionality.

A Formal Performance Tuning Methodology: Wait-Based Tuning

Steven Haines talks about tackling web application performance tuning by proposing a method called wait-based tuning.

Shaw and Fowler About Forging a New Alliance

Shaw and Fowler talk about the need for a new relationship between the business department and the IT department. Studies have shown that projects mostly fail due to miscommunication between the two.