JTextAreaとJTextFieldのサンプル(不具合対応あり)

Rubeus練習のため、テキストフィールドに文字列を打ち込んでEnterキーを押したらテキストエリアに貼り付ける、といった簡単なプログラムを作ってみました。

ソースコードはこちら

require 'rubeus'

Rubeus::Swing.irb
  
JFrame.new do |frame|
  frame.layout = BoxLayout.new :Y_AXIS

  @text = JTextArea.new :preferred_size=>"320x200"
  @text.editable = false

  JPanel.new do |p|
    p.layout = BoxLayout.new :X_AXIS
    JLabel.new "text-> "
    @field = JTextField.new do |event|
      if event.key_code == 10 #Enter
        @text.append @field.text+"\n"
        @field.text = ""
      end
    end
  end

  frame.location_relative_to = nil
  frame.pack
  frame.visible = true
end

アスキーコード取得する場合(v1.9)は、次のようにもできるようです。

"\n".getbyte(0) #=>10

エラーが出てうまく動作しないとき

確認バージョン

このサンプルを動かすと、次のようなメッセージがでるとき、

Exception in thread "AWT-EventQueue-0" org.jruby.exceptions.RaiseException: (ArgumentError) wrong number of arguments (1 for 0)
        at org.jruby.gen.InterfaceImpl1189718079.keyTyped(org/jruby/gen/InterfaceImpl1189718079.gen:13)
Exception in thread "AWT-EventQueue-0" org.jruby.exceptions.RaiseException: (ArgumentError) wrong number of arguments (1 for 0)

swingにて、addKeyListenerが呼ぶメソッドは、keyPressed(e), keyReleased(e), keyTyped(e)の3つ。
メッセージをみると、どうやらkeyTypedとkeyReleasedのメソッドに引数が足りていないのが原因のようです。

とりあえずの回避方法として、gemにインストールされているファイルを直接いじります。
$GEMS/rubeus-0.0.9-java/lib/rubeus/awt/event.rb: 40

#    NULL_METHOD = Proc.new{}
    NULL_METHOD = Proc.new{|e| }

他のlistenerにも影響しそうなので、この修正でよいのか自信がありません。
あと、gemの直接修正は自己責任でネ。

とりあえず、ここまで。