Rubeus初リリース!

Rubeus(るびうす)はJRubyを使ってJavaAPIRubyっぽくしちゃえというコンセプトで立ち上がったプロジェクトです。

というわけで、Rubeus始めました!

論よりコード、というわけでJavaで書いたものとJRubyRubeusを使って書いたものを比べてみてください。インストール方法や動作確認方法などは上のページに書いてあります。

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とか他のAPIRubyっぽくしていけたら面白いんじゃないかなーと思ってます。

http://groups.google.com/group/rubeus で参加できますので、興味のある方は是非。