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