前回、JavaでJRubyのスクリプトを実行する為の土俵作りをしました。
出来た土俵はこんな感じ。


右のテキストエリアにRubyスクリプトを打ち込んで、マウス右クリックしてポップアップメニューの「実行」を選択すると、実行結果が左のテキストエリアに出てくる、と言う仕掛けです。
このプログラム中で、
このプログラム中で、
JMenuItem ExecMenu = new JMenuItem("実行" ) ;
//メニューセレクト時の処理をリスナーに追加
ExecMenu.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
execJRuby();//メニュー選択で実行する処理
}
});
//メニューセレクト時の処理をリスナーに追加
ExecMenu.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
execJRuby();//メニュー選択で実行する処理
}
});
と、書かれている部分が所謂イベントハンドラと言うヤツです。
ExecMenuと言う名前でポップアップメニューの項目(JMenuItem)を作っています。
これは実はボタンの一種です。ポップアップメニューはマウスの右クリックがあったらそこにボタンを表示しているのと同じです。
ExecMenuと言う名前でポップアップメニューの項目(JMenuItem)を作っています。
これは実はボタンの一種です。ポップアップメニューはマウスの右クリックがあったらそこにボタンを表示しているのと同じです。
ExecMenu.addActionListener で、そのボタンを押された時に実行するメソッドを指定しています。
ここでは、execJRuby()と言うメソッドを呼び出すわけです。
ここでは、execJRuby()と言うメソッドを呼び出すわけです。
このメソッドを定義して、その中でJRubyにスクリプトを実行させ、その結果を受け取って、画面の左側に表示するわけです。
execJRuby()は、まず以下のコードを書いてみました。
//JRubyスクリプト実行メソッド
void execJRuby(){
void execJRuby(){
String rb = ScriptText.getText();
Ruby ruby1 = Ruby.newInstance();//JRuby実行オブジェクトを得る
IRubyObject iro = ruby1.evalScriptlet(rb);//スクリプトを実行
}Ruby ruby1 = Ruby.newInstance();//JRuby実行オブジェクトを得る
IRubyObject iro = ruby1.evalScriptlet(rb);//スクリプトを実行
1行目で右側のテキストエリアに打ち込まれたスクリプトを取り出し、
2行目でそのスクリプトを解釈実行するRubyオブジェクトを用意し、
3行目で実行させています。
実行すると・・・・

左側はDos窓です。
実行したスクリプトの結果がDos窓の中に出ています。
2行目でそのスクリプトを解釈実行するRubyオブジェクトを用意し、
3行目で実行させています。

左側はDos窓です。
実行したスクリプトの結果がDos窓の中に出ています。
当たり前と言えば当たり前ですね。
実行する部分だけで、結果を左のテキストエリアに出力させる処理を書いていませんでした。
実行する部分だけで、結果を左のテキストエリアに出力させる処理を書いていませんでした。
何らかの方法で実行結果をDos窓の方へ出させずに、ウィンドウ内に取り込まなければなりません。
次回はその部分を作ってみましょう。