アクションを追加する

基本となるGUIが完成したので、アクションを追加していきます。

まず、サイトから単語の意味を取ってくるクラスを作成しましょう。今回はアルクというサイトを使って英和和英辞書を作ります。
dictionaryパッケージにEnglishDic.javaを作成します。

(現在は、サイトの仕様変更に伴い以下の実装では英語辞書を使用できません。参考程度にご利用ください。)

EnglishDic.java

package dictionary;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.UnknownHostException;

public class EnglishDic {
	
	public String getHtml(String words) {
		try {
			URL url = new URL(・・・・(1)
				"http://www2.alc.co.jp/ejr/index.php?word_in="
						+ words
						+ "&word_in2=%82%A0%82%A2%82%A4%82%A6%82%A8&word_in3=PVawEWi72JXCKoa0Je");
			URLConnection urlcon = url.openConnection();
			urlcon.setDoOutput(true);

			BufferedReader buffer;
			try {
				buffer = new BufferedReader(new InputStreamReader(urlcon.getInputStream()));
			} catch (UnknownHostException e) {
				return "ネットに接続できませんでした。";
			} catch (IOException e) {
				return null;
			}

			String message = new String(),line;
			while ((line = buffer.readLine()) != null) {
				message += line + "\n";
			}
			buffer.close();
			return setHtml(message);
			
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
	private String setHtml(String message) {
		int begin = message.indexOf("<ul>");・・・・(2)
		int end = message.indexOf("</ul>");
		if (begin < 0)
			return "単語を発見できませんでした。";
		
		return "<html><font size=-1>" + message.substring(begin + 4, end) + "</html>";
	}
}

このクラスのgetHtmlメソッドを呼ぶと、引数にした単語の意味のhtmlを返すようになっています。
(1)で、単語とサイトのアドレスを組み合わせています。その後の処理で、意味のページのHtmlを受け取ります。
(2)以下の処理で、受け取ったHtmlの中から必要な部分だけを取り出しています。今回は、たまたま<ul></ul>で囲まれた部分が意味に該当していたため、そのような処理になっています。

これで、意味を取ってくるクラスの基本的な部分が完成しました。

次に、DicViewクラスに、上で作ったクラスを使って意味を取ってくるメソッドを追加してみましょう。

DicView.java

   ・
  ・
public class DicView extends ViewPart{

	private Text text;
	private Browser browser;
	private EnglishDic english;

	public DicView() {
		english = new EnglishDic();
	}

	public void createPartControl(Composite parent) {
           ・
           ・
    (text・browserをフィールドにしておきます)
           ・
           ・
	}

	public void translate(){
		String getText = text.getText();
		browser.setText(english.getHtml(getText));
	}
           ・
           ・
}


上のtranslate()メソッドで、textに書かれた単語をEnglishDicクラスのgetHtmlメソッドに渡して、受け取ったHtmlをブラウザに表示するようになっています。

では、このtranslate()メソッドをボタンで実行できるようにしましょう。
buttonにSelectionListenerを追加します。

DicView.java

import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;

    ・
    ・
    ・
	public void createPartControl(Composite parent) {
           ・
           ・
           ・
        Button button = new Button(group, SWT.PUSH);
		button.setLayoutData(new GridData(70, 25));
		button.setText("search");
		button.addSelectionListener(new SelectionAdapter(){・・・・(1)
			public void widgetSelected(SelectionEvent e){
				translate();
			}
		});
           ・
           ・
	}
    ・
    ・

これでbuttonを押したときのアクションとしてtranslate()メソッドを呼べるようになりました。
(1)で、SelectionAdapter()を追加しています。ボタンをクリックするとwidgetSelected()イベントが発生します。

では、実際に起動してみましょう。

テキストボックスに「dictionary」と入力して、searchボタンを押してみると上のように意味が表示されるようになりました。

これで、簡単な辞書プラグインが完成しました。
次からは、このプラグインの機能を追加していきます。
<前へ 次へ>