SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

JRubyからJavaへのアクセス方法

Javaのクラスを利用する簡易言語としてJRubyを使う方法


  • X ポスト
  • このエントリーをはてなブックマークに追加

Rubyらしさのための同義語

 Javaの命名規則はRubyとは異なります。JRubyは、Javaのメソッド名をRubyの命名規則に従って変換した同義語メソッドを用意することによって、Rubyの人々の便宜を図っています。

  • setXyz(a)xyz=(a)
  • frame.setVisible(true)  frame.visible = true
    
     
  • getXyz()xyz()
  • frame.getContentPane  frame.contentPane
    
     
  • abcDefGhi(…)abc_def_ghi(…)
  • frame.contentPane  frame.content_pane
    

 下記はそれを利用した例です。

include Java

swing = javax.swing
JFrame = swing.JFrame

frame = JFrame.new("窓の例")
label = swing.JLabel.new("こんにちは")
frame.content_pane.add(label)
frame.default_close_operation = JFrame::EXIT_ON_CLOSE
frame.pack
frame.visible = true
補足
 同義語メソッドがあらかじめ用意されているのか、それとも未定義メソッドの呼出しごとにその場で用意されるのかは実装詳細です。

RubyによるJavaインターフェイスの実装

 Rubyのクラス定義でJavaのインターフェイス(の名前のように見えるRubyメソッド呼出しの戻り値)をincludeし、対応するメソッドを定義することによって、Javaのインターフェイスを実装できます。

include Java

swing = javax.swing
JFrame = swing.JFrame

frame = JFrame.new("窓の例")
button = swing.JButton.new("カウンタ")

class ButtonAction
  include java.awt.event.ActionListener

  def initialize(button)
    @button = button
    @count = 0
  end

  def actionPerformed(evt)
    @count += 1
    @button.text = "%03d" % @count
  end
end

button.add_action_listener(ButtonAction.new(button))
frame.content_pane.add(button)
frame.default_close_operation = JFrame::EXIT_ON_CLOSE
frame.pack
frame.visible = true

 このようなウィンドウが表示されます:

 

 ボタンを1回押すと次のようになります:

 

 ボタンをさらに1回押すとこうなります:

 

RubyによるJavaクラスの拡張

 Javaのクラス(の名前のように見えるRubyメソッド呼出しの戻り値)を基底クラスとしてRubyのクラスを定義すれば、RubyでJavaのクラスを拡張できます。

include Java

swing = javax.swing
JFrame = swing.JFrame

class Button < swing.JButton
  include java.awt.event.ActionListener

  def initialize
    super("000")
    @count = 0
    add_action_listener(self)
  end

  def actionPerformed(evt)
    @count += 1
    self.text = "%03d" % @count
  end
end

frame = JFrame.new("窓の例")
button = Button.new
frame.content_pane.add(button)
frame.default_close_operation = JFrame::EXIT_ON_CLOSE
frame.pack
frame.visible = true

次のページ
配列の相互変換

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

(鈴)(リン)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1953 2011/03/18 15:39

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング