SWT in NetBeans Ruby IDE
どうやらNetBeansのPreview側ではなく、このへんで更新されているIDEのほうがよいらしいので乗り換え。さくさく動きます。
前に書いたSWTについては、jruby.batにパスを書いて、デバッグ実行ならうまくいった(通常の実行はうまくいかない)なぜだろう。通常の実行はプロジェクトで指定したパスを見に行くけど、それだとswt**.dllの場所を見つけられないが、デバッグ実行だとjruby/libの下を見に行ってうまくいく……なんてことはないか。よくわかりません。
で、swtをいろいろ書いてみるが、イベントリスナの登録をどうしたらいいか悩む。結果的に下記のように出来たが、匿名クラスでやるやりかたがわからなかったのでとりあえず普通にクラスを作ってしまった。匿名クラスならローカルスコープで参照できるフォームのコントロールへの参照がとれないので、わざわざアトリビュートを作っていていまいち綺麗ではない。
# main.rb # 2007/06/13 # require 'java' module SWTJava include_package 'org.eclipse.swt' include_package 'org.eclipse.swt.layout' include_package 'org.eclipse.swt.widgets' include_package 'org.eclipse.swt.events' end class ClickEvent < SWTJava::SelectionAdapter attr_writer :text_label def widgetSelected(e) shell = e.getSource.getShell mesBox = SWTJava::MessageBox.new(shell) mesBox.setMessage("#{e.getSource.getText}がクリックされました") mesBox.open @text_label.setText("#{e.getSource.getText}がクリックされたあと") end end SWTJava::Display.setAppName "SWTのテスト" display = SWTJava::Display.new shell = SWTJava::Shell.new(display) shell.setSize(450, 200) layout = SWTJava::FillLayout.new(SWTJava::SWT::VERTICAL) shell.setLayout layout shell.setText "Ruby SWT Test" label = SWTJava::Label.new(shell, SWTJava::SWT::CENTER) label.setText("テキストラベル") button = SWTJava::Button.new(shell, SWTJava::SWT::PUSH) button.setText("あいうえおボタン") al = ClickEvent.new() al.text_label = label button.addSelectionListener(al) shell.pack shell.open while (!shell.isDisposed) do display.sleep unless display.readAndDispatch end display.dispose