2008-12-22 (Mon) [長年日記]

Re: はじめてのswing on jruby その参

xibbarさんのところでその参が追加されたのでさらに便乗しましたが、すでに載ってました。メソッドでのディスパッチが必要な例を書いてみました。遅くなってすまん。

require 'java'
 
import javax.swing.JFrame
import javax.swing.JPanel
 
class SimplePaint < JFrame
  def initialize(title)
    super title
    panel=self.content_pane
    panel.add_mouse_listener(java.awt.event.MouseListener.impl do |method, e|
      case method
      when :mousePressed
        @x = e.get_x
        @y = e.get_y
      end
    end)
    panel.add_mouse_motion_listener(java.awt.event.MouseMotionListener.impl do |method, e|
      case method
      when :mouseDragged
        g = e.source.graphics
        x = e.get_x
        y = e.get_y
        g.draw_line(@x,@y,x,y)
        @x = x
        @y = y
      end
    end)
  end
end
 
frame=SimplePaint.new("SimplePaint")
frame.default_close_operation=(JFrame::EXIT_ON_CLOSE)
frame.set_size(350,250)
frame.visible=true

ブロックにすると変数のスコープが最小化できるのが良いですね。ハンドラをひとつのクラスに集約したいときは普通にクラスにしたほうが良いでしょう。

Tags: JRuby