読者です 読者をやめる 読者になる 読者になる

はじめてのswing on jruby その壱

jruby ruby swing


ボタンを押せるけど、何も反応しないプログラム。
Hello Worldだと思っておけ。)
Javaで書くと

import javax.swing.*;

public class SimpleGui1 {
  public static void main (String [] args) {
    JFrame frame = new JFrame();
    JButton button = new JButton("click me");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(button);
    frame.setSize(300,300);
    frame.setVisible(true);
  }
}

Jrubyで書くと

#!/usr/bin/env jruby
require 'java'
include_class 'javax.swing.JFrame'
include_class 'javax.swing.JButton'

class SimpleGui1
  def initialize
    frame=JFrame.new
    button=JButton.new("click me")
    frame.default_close_operation=(JFrame::EXIT_ON_CLOSE)
    frame.content_pane.add(button)
    frame.setSize(300,300)
    frame.visible=(true)
  end
end

SimpleGui1.new

ポイント

  • swingはJavaの機能なのでrequire 'java'を書く
    • これを書かないとinclude_classがそもそも使えない
  • 必要なswingのクラスをinclude_classで読み込み。Javaでいうimportと一緒。
  • メソッド名はsetDefaultCloseOperationがdefault_close_operation=と言った感じにRuby流の名前で呼び出せる。
    • これはRubyのセッターとゲッターの一般的なネーミングルール
    • ただし、#size=のように使えないものもある。この場合はsetSize(300,300)のようにJava流に使うべし