ラベル RCP の投稿を表示しています。 すべての投稿を表示
ラベル RCP の投稿を表示しています。 すべての投稿を表示

2008年7月3日木曜日

Quick Search API を試す

6.5M1 リリース間近という事で、新機能の Quick Search API を試します
元ネタは Geertjan's Blog の ココやココのエントリー、 NetBeans Zone のココになります
(ほとんど上記のコピーです)

今回の例では Wikipedia の記事を検索します
まずは開発版ビルドをダウンロード、インストールします
次にモジュールプロジェクトを作成します
新規ファイル作成ウィザードの Module Development 中に "Quick Search Provider"という項目がありますので、これを選択します


Wikipedia の検索なので、以下のように入力し、関連ファイルを作成しています


次に実装を行います
ソースコードは以下のようにしました
(取り敢えず作った感じなので、結構適当です)

public class WikipediaSearchProvider implements SearchProvider {
private static final String GOOGLE_API_KEY = ""; // キーは各自で設定を行って下さい
private static final String GOOGLE_APIS_DOMAIN = "ajax.googleapis.com";
private static final String JA_WIKIPEDIA_DOMAIN = "ja.wikipedia.org";
private static final String GOOGLE_SEARCH_SERVICE_PARAMS = "?v=1.0&rsz=small&key=" + GOOGLE_API_KEY + "&q=site%3a" + JA_WIKIPEDIA_DOMAIN + "%20";
private static final String GOOGLE_SEARCH_SERVICE_URL = "http://" + GOOGLE_APIS_DOMAIN + "/ajax/services/search/web" + GOOGLE_SEARCH_SERVICE_PARAMS;
private static final String HTTP_REFERER_URL = "http://snakemanshow.blogspot.com";

/**
* Method is called by infrastructure when search operation was requested.
* Implementors should evaluate given request and fill response object with
* apropriate results
*
* @param request Search request object that contains information what to search for
* @param response Search response object that stores search results. Note that it's important to react to return value of SearchResponse.addResult(...) method and stop computation if false value is returned.
*/
public void evaluate(SearchRequest request, SearchResponse response) {
try {
URL url = new URL(GOOGLE_SEARCH_SERVICE_URL + URLEncoder.encode(request.getText(), "UTF-8"));
URLConnection conn = url.openConnection();
conn.setRequestProperty("Referer", HTTP_REFERER_URL);

JSON json = new JSON();
HttpResponse httpResponse = json.parse(conn.getInputStream(), HttpResponse.class);
List results = httpResponse.getResponseData().getResults();

if(results != null) {
for(GwebSearch search : results) {
if(!response.addResult(new OpenFoundArticle(search.getUnescapedUrl()), search.getTitleNoFormatting()));
}
}
} catch (IOException e) {
Exceptions.printStackTrace(e);
}
}

private static class OpenFoundArticle implements Runnable {

private String article;

public OpenFoundArticle(String article) {
this.article = article;
}

public void run() {
try {
URLDisplayer.getDefault().showURL(new URL(article));
} catch (MalformedURLException e) {
Exceptions.printStackTrace(e);
}
}
}
}

NetBeans API は 作成時に追加される Quick Search API 以外に UI Utilities API、 Utilities API を追加しており、 JSON のパースには JSONIC を使用しています
(JSONIC は依存パッケージもなく、使用方法も直感的とすばらしいライブラリです)

実行すると、以下のように Wikipedia から関連記事のタイトルを表示します


もちろん、日本語でも検索できます


NetBeans ソースコード検索用のモジュールを作成すると、ソースコードリーディングが楽になっていいかも…

2008年6月19日木曜日

ドロップダウンボタンを作る

モジュール開発でのドロップダウンボタンの作り方です
ドロップダウンボタンとはボタンそのもののも機能を持ちつつ、ボタンの一部をクリックするとメニューが出てくるというボタンです
NetBeans ではデバッガやプロファイラのツールボタンなどがそれにあたります

NetBeans Wiki や Geertjan の blog でもドロップダウンメニューに関する記述はあるのですが、ボタンからのアクションの実装方法については触れていなかったので、簡単に説明したいと思います

まず、適当にモジュール開発プロジェクトを作成し、ツールバーにボタンを表示するためのアクションを作成します


例では CallableSystemAction を選択します


大域ツールバーボタンをチェックし、表示する位置を指定します


適当にアクション名、表示名、アイコンなどを設定します


これら、アクションを使ったツールバーボタンの作成に関しては公式チュートリアル「NetBeans Google ツールバーモジュールのチュートリアル」に詳しくありますので、そちらも参照下さい

以上でツールバーボタンの雛形はできました
これから実際にコードを記述する前に今回必要なライブラリを追加します
プロジェクトのプロパティからライブラリを選択し、以下と同様になるようライブラリを追加します
(Utilities API はアクション作成時に自動的に登録されるはずなので、 UI Utilities API と Dialogs API を追加して下さい)

次にボタンをクリックされる際に実行されるコードを書きます
(今回は簡単にダイアログを表示するだけの機能としています)
performAction() メソッドを以下のように実装します
    public void performAction() {
String message = "Drop-Down ボタンサンプルプログラム";

// ダイアログ表示
DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message(message, NotifyDescriptor.INFORMATION_MESSAGE));
}


次はドロップダウンメニューを表示するコードを書きます
getToolbarPresenter() メソッドをオーバーライドし、以下のように実装します
    @Override
public Component getToolbarPresenter() {
// ドロップダウンメニューの項目名
String[] names = {"Item#1", "Item#2", "Item#3", "Item#4", "Item#5"};

// ドロップダウンメニューの実装
JPopupMenu dropdownPopup = new JPopupMenu();
ButtonGroup buttonGroup = new ButtonGroup();

for (String name : names) {
JCheckBoxMenuItem item = new JCheckBoxMenuItem(name);
item.setName(name);
buttonGroup.add(item);
dropdownPopup.add(item);
}

// ドロップダウンメニューボタンの生成
JButton dropdownButton = DropDownButtonFactory.createDropDownButton(
new ImageIcon(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB)),
dropdownPopup);
// アクションとの関連づけ
Actions.connect(dropdownButton, (Action) this);

return dropdownButton;
}


以下が各部分の説明です
        // ドロップダウンメニューボタンの生成
JButton dropdownButton = DropDownButtonFactory.createDropDownButton(
new ImageIcon(new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB)),
dropdownPopup);
DropDownButtonFactory クラスは createDropDownButton() メソッドにて、小さな矢印アイコンを持ち、クリック時に設定したポップアップメニューを表示するボタンを生成します

        // アクションとの関連づけ
Actions.connect(dropdownButton, (Action) this);
Actions クラスはメニューやツールバー操作のサポートクラスで、 connect() メソッドを使い、ボタンやメニューアイテムなどとアクションを関連づける事ができます

以上で実装は完了なので、実行して動作を確認します
ボタンをクリックすると、ダイアログが表示されます


次に矢印部分をクリックするとポップアップメニューが表示されます


元ネタは前述のプロファイラのボタンですが、プロファイラの場合は Action と Presenter.Toolbar インターフェイスを実装して作っています
参考になる部分が多いので、作成する際には ProfilerToolbarDropdownActionクラスのコードリーディングをお勧めします

2008年4月12日土曜日

NetBeans Platform Application について

6.1 から NetBeans Platform Application を開発するためのプロジェクトウィザードが独立しました

ちなみに6.0.1ではこのようになります
(比較しやすいようにlocaleオプションを使い、英語UIにてキャプチャしています)

"Projects" のリストから "NetBeans Platform Application" を選択し、"Next" をクリックするとプロジェクト設定のウィザードに遷移します

プロジェクト名などを入力し、"Finish" をクリックすると NetBeans Platform Application のプロジェクトを作成してくれます


プロジェクトを選択し、実行すると NetBeans Platform Application の雛形が起動します

NetBeans API はお世辞にも簡単とは言えませんが、こういった機能が増えると開発の効率アップになるのではと思います