โดยใช้ JRuby เข้ามาช่วย
สิ่งที่น่าสนใจในโปรเจคนี้ก็คือแนวคิดเรื่อง LEL (Layout Expression Language)
โดยนำแนวคิดของเรื่อง table format ในพวก wiki มาผสมกับ Constraint programming
ก็เลยได้ออกมาเป็นวิธีใหม่ในการวาง layout
ลองดูตัวอย่าง code
require 'profligacy/swing'
require 'profligacy/lel'
module Test
include_package 'javax.swing'
include Profligacy
layout = "
[ label_1 | label3 ]
[ (300,300)*text1 | (150)people ]
[ <label2 | _ ]
[ message | buttons ]
"
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
c.buttons = Swing::LEL.new(JPanel, "[send|hate|quit]") do |c,i|
c.send = JButton.new "Send"
c.hate = JButton.new "Hate"
c.quit = JButton.new "Quit"
end.build :auto_create_container_gaps => false
end
ui.build(:args => "Simple LEL Example")
end
จะเห็นว่า main format เขาวางไว้แบบนี้
[ label_1 | label3 ]
[ (300,300)*text1 | (150)people ]
[ <label2 | _ ]
[ message | buttons ]
คำอธิบายก็คือ layout จะเป็น grid ที่มี 4 แถว 2 column,
< หมายถึง ชิดซ้าย
> หมายถึง ชิดขวา
* คือ expand ให้เต็มพื้นที่
_ หมายถึง empty cell
(150) หมายถึง กว้าง 150 pixel
(300,300) กว้าง 300 ยาว 300 pixel
ผลลัพท์ที่ได้ ลองตามไปดูที่นี่
http://ihate.rubyforge.org/profligacy/images/sample_lel_gui_nested.png
1 comment:
ง่ะ เจ๋งอ่ะ
ต่อคง [(len(str),300)*str | _ ] อะไรแบบนี้ได้
Post a Comment