Rubeus初リリース!
Rubeus(るびうす)はJRubyを使ってJavaのAPIをRubyっぽくしちゃえというコンセプトで立ち上がったプロジェクトです。
というわけで、Rubeus始めました!
論よりコード、というわけでJavaで書いたものとJRubyとRubeusを使って書いたものを比べてみてください。インストール方法や動作確認方法などは上のページに書いてあります。
import java.awt.Dimension; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyEvent; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import javax.swing.JTextPane; import javax.swing.JSplitPane; public class JavaSwingExample01 { public static void main(String[] args) { JFrame frame = new JFrame("Rubeus Swing Example 01"); frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS)); JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); frame.add(splitPane); JPanel panel = new JPanel(); splitPane.setTopComponent(panel); panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); final JTextField textField = new JTextField(); panel.add(textField); final JTextPane textPane = new JTextPane(); textField.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent event) { if (event.getKeyCode() == 10) { textPane.setText(textPane.getText() + textField.getText() + "\n"); textField.setText(""); } } }); JButton button = new JButton("append"); panel.add(button); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event) { textPane.setText(textPane.getText() + textField.getText() + "\n"); textField.setText(""); } }); JScrollPane scrollPane = new JScrollPane(textPane); splitPane.setBottomComponent(scrollPane); scrollPane.setPreferredSize(new Dimension(400, 250)); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }
http://code.google.com/p/rubeus/source/browse/trunk/examples/JavaSwingExample01.java
include Java require 'rubygems' gem "rubeus" require "swing_ext" import 'javax.swing.BoxLayout' import 'javax.swing.JButton' import 'javax.swing.JFrame' import 'javax.swing.JPanel' import 'javax.swing.JScrollPane' import 'javax.swing.JTextField' import 'javax.swing.JTextPane' import 'javax.swing.JSplitPane' JFrame.new("Rubeus Swing Example 01") do |frame| frame.layout = BoxLayout.new(frame.content_pane, BoxLayout::Y_AXIS) JSplitPane.new(JSplitPane::VERTICAL_SPLIT) do JPanel.new do |panel| panel.layout = BoxLayout.new(panel, BoxLayout::X_AXIS) @text_field = JTextField.new do |event| if event.key_code == 10 # RETURN @textpane.text += @text_field.text + "\n" @text_field.text = '' end end JButton.new("append") do @textpane.text += @text_field.text @text_field.text = '' end end JScrollPane.new do |pane| pane.set_preferred_size(400, 250) @textpane = JTextPane.new end end frame.set_size(400, 300) frame.default_close_operation = JFrame::EXIT_ON_CLOSE frame.visible = true end
http://code.google.com/p/rubeus/source/browse/trunk/examples/rubeus_swing_example01.rb と同じ内容のものですが、コメントを省いてあります。
Swingを使うときもRubyっぽく書きたい!という気持ちだけで作っちゃってるので、何に使えるとかまだまだ模索してますが、こんな調子でJDBCとか他のAPIもRubyっぽくしていけたら面白いんじゃないかなーと思ってます。
http://groups.google.com/group/rubeus で参加できますので、興味のある方は是非。