Javaのソースを JRuby に翻訳してみた。

Javaのソースを JRuby に翻訳してみた。

拾ってきたソースはこれ(↓)
http://www.javadrive.jp/tutorial/gridbaglayout/index3.html

まあ、なんとも、簡単に出来てしまったぞ。

(1)Javaのソースとほぼ1対1で対応する。

(2)mainは外に出す。

(3)クラスの継承が問題があるようで
#public class GridBagLayoutTest1 extends JFrame{

#class GridBagLayoutTest1 < JFrame
では駄目で、承継しない形にして、内部に @frame を持つことにした。

class GridBagLayoutTest1
  ・・
  attr_reader :frame
 ・・
    @frame = JFrame.new
  ・・
frame = GridBagLayoutTest1.new.frame;

(4)日本語が出ない! と思ったら
# button2.setFont(Font.new("Arial", Font::PLAIN, 30));
という余分なことをしているからでした、これを外せばOK。

(5)Javaを知らないので、何をやっているのかは知りません。(^^;

#! jruby -Ku
#
# http://www.javadrive.jp/tutorial/gridbaglayout/index3.html
#
# GridBagLayoutTest1.java
#

# とりあえず require "java"

require "java"

#import javax.swing.*;

JFrame        = javax.swing.JFrame
JPanel        = javax.swing.JPanel
JButton       = javax.swing.JButton

#import java.awt.Font;
#import java.awt.GridBagLayout;
#import java.awt.GridBagConstraints;
#import java.awt.BorderLayout;

Font               = java.awt.Font;
GridBagLayout      = java.awt.GridBagLayout;
GridBagConstraints = java.awt.GridBagConstraints;
BorderLayout       = java.awt.BorderLayout;

#public class GridBagLayoutTest1 extends JFrame{

#class GridBagLayoutTest1 < JFrame
class GridBagLayoutTest1  #(3)クラスの継承が問題があるようで・・
  attr_reader :frame      #(3)クラスの継承が問題があるようで・・

#  GridBagLayoutTest1(){

  def initialize

    @frame = JFrame.new   #(3)クラスの継承が問題があるようで・・

#    GridBagLayout layout = new GridBagLayout();
#    JPanel p = new JPanel();
#    p.setLayout(layout);

    layout = GridBagLayout.new;
    p      =  JPanel.new;
    p.setLayout(layout);

#    GridBagConstraints gbc = new GridBagConstraints();

    gbc = GridBagConstraints.new

#    JButton button1 = new JButton("Google");

    button1 = JButton.new("Google");

#    gbc.gridx = 0;
#    gbc.gridy = 0;
#    layout.setConstraints(button1, gbc);

    gbc.gridx = 0;
    gbc.gridy = 0;
    layout.setConstraints(button1, gbc);

#    JButton button2 = new JButton("Yahoo!");
#    button2.setFont(new Font("Arial", Font.PLAIN, 30));

#    button2 = JButton.new("Yahoo!");
#    button2.setFont(Font.new("Arial", Font::PLAIN, 30));
    button2 = JButton.new("やふー!");  #(4)日本語が出ない! と思ったら・・

#    gbc.gridx = 1;
#    gbc.gridy = 0;
#    layout.setConstraints(button2, gbc);

    gbc.gridx = 1;
    gbc.gridy = 0;
    layout.setConstraints(button2, gbc);

#    JButton button3 = new JButton("MSN");

    button3 = JButton.new("MSN");

#    gbc.gridx = 1;
#    gbc.gridy = 1;
#    layout.setConstraints(button3, gbc);
#
    gbc.gridx = 1;
    gbc.gridy = 1;
    layout.setConstraints(button3, gbc);

#    p.add(button1);
#    p.add(button2);
#    p.add(button3);

    p.add(button1);
    p.add(button2);
    p.add(button3);

#(3)クラスの継承が問題があるようで
#継承クラス方式では、この部分で実行時に
#invokee not a java object (TypeError)
#というエラーが出た。
#getContentPane メソッドの呼び出し自体でエラーになる。

#    getContentPane().add(p, BorderLayout.CENTER);

#    getContentPane.add(p, BorderLayout::CENTER);
#    get_content_pane
#    2.jrb:97:in `initialize': invokee not a java object (TypeError)

    @frame.getContentPane.add(p, BorderLayout::CENTER);

#  }

  end # initialize

#}

end

# (2)mainは外に出す。

#  public static void main(String[] args){
#    GridBagLayoutTest1 frame = new GridBagLayoutTest1();
#
#    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
#    frame.setBounds(10, 10, 300, 200);
#    frame.setTitle("タイトル");
#    frame.setVisible(true);
#  }

frame = GridBagLayoutTest1.new.frame;  # (3)クラスの継承が問題があるようで・・
frame.setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE);
frame.setBounds(10, 10, 300, 200);
frame.setTitle("タイトル");
frame.setVisible(true);