#!/usr/bin/env ruby # # GUI sample script: # Simple GUI (Implementation of java.awt.event interfaces) # $LOAD_PATH << File.join(File.expand_path(File.dirname(__FILE__)),'..','yajb') require 'yajb/jbridge' include JavaBridge jimport "javax.swing.*" jimport "java.awt.event.*" jimport "java.awt.GridLayout" button1 = jnew :JButton, "send message to ruby" action1 = jextend :ActionListener action1.jdef(:actionPerformed) do |event| ## implementation by block puts "called by Java : #{event.toString}" end button1.addActionListener(action1) button2 = jnew :JButton, "exit" action2 = jextend :ActionListener def action2.actionPerformed(event) ## implementation by singleton method wakeup_thread end button2.addActionListener(action2) frame = jnew(:JFrame) frame.addWindowListener(:WindowListener.jext() do |method, args| puts "#{method} called with #{args.nil? or args.empty? ? 'no args' : args.collect{|a| a.inspect}.join(',')}" if method == 'windowClosing' wakeup_thread end end) panel = jnew(:JPanel,jnew(:GridLayout,3,1)) panel.add(button1) panel.add(button2) frame.getContentPane.add(panel) frame.pack frame.show stop_thread