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の直接修正は自己責任でネ。
とりあえず、ここまで。