JButton押下イベントを登録

javaと同じように普通にActionListenerを継承したクラスを作ってJButtonに登録

#!/usr/bin/env jruby
require 'rubygems'
require 'java'
import 'javax.swing.JFrame'
import 'javax.swing.JPanel'
import 'javax.swing.JLabel'
import 'javax.swing.JButton'
import 'java.awt.event.ActionListener'

f = JFrame.new
f.title = 'GUI test'
f.setSize(400, 300)

panel = JPanel.new

button = JButton.new 'test'

class Listener < ActionListener.class
  def action_performed(e)
    puts 'hoge'
  end
end
listener = Listener.new
button.add_action_listener listener

panel.add button
f.content_pane.add(panel)

f.visible = true


ActionListenerインスタンスに直接特異メソッドで追加しても動いた

#!/usr/bin/env jruby
require 'rubygems'
require 'java'
import 'javax.swing.JFrame'
import 'javax.swing.JPanel'
import 'javax.swing.JLabel'
import 'javax.swing.JButton'
import 'java.awt.event.ActionListener'

f = JFrame.new
f.title = 'GUI test'
f.setSize(400, 300)

panel = JPanel.new

button = JButton.new 'test'
button2 = JButton.new 'button2'

listener = ActionListener.new
def listener.action_performed(e)
  puts 'asdf'
end

listener2 = ActionListener.new
def listener2.action_performed(e)
  puts 'button2'
end

button.add_action_listener listener
button2.add_action_listener listener2

panel.add button
panel.add button2
f.content_pane.add(panel)

f.visible = true

他にこんな方法もあった http://www.codecommit.com/blog/ruby/jruby-event-proxy