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);