最もシンプルなペインを作成するplane-textコンポーネントを例として示します。 当該コンポーネントはソースコードをダウンロードするとプロジェクトとして含まれています。
package jp.gr.linuxcons.richclient.antenna.view.pane.text.plane;
import java.awt.Component;
import java.net.URL;
import java.util.List;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import jp.gr.linuxcons.richclient.antenna.ViewActionNotifier;
import jp.gr.linuxcons.richclient.antenna.UpdateInfo;
import jp.gr.linuxcons.richclient.antenna.impl.AbstractComponentPane;
/**
* テキストエリアで構成されたPane
*
* @author ms2
*/
public class TextPane
extends AbstractComponentPane //継承すること
{
/**
* シリアルバージョンUID
*/
private static final long serialVersionUID = -3685516110230281228L;
private JScrollPane scrollPane;
private JTextArea textArea = null;
/**
* 名前を取得します。<br>
* タブのラベルに利用されます。
*
* @return 名前
*/
public String getName() {
return "text";
}
/**
* コンポーネントを取得します。<br>
* Paneが表示する内容として利用されます。
*
* @return コンポーネント
*/
public Component getComponent() {
return getScrollPane();
}
/**
* 更新情報のプロパティが選択されたイベントのハンドラ<br>
* タイトルの項目を選択された場合にテキストエリアに詳細文字列を表示する。
*
* @param info 選択された更新情報
* @param property 選択されたプロパティ
* @return タブの最前面化をするなら真。さもなくば偽。
*/
public boolean handleUpdateInfoPropertySelection(UpdateInfo info,
String property) {
if (!"title".equals(property)) {
getTextArea().setText(info.getDescription());
return true;
}
return false;
}
/**
* URL選択イベントのハンドラ<br>
* このクラスはこのイベントに反応しないので何も記述しない。
*
* @param url 選択されたURL
* @return タブの最前面化をするなら真。さもなくば偽。
*/
public boolean handleUrlSelection(URL url) {
return false;
}
/**
* キーワード選択イベントのハンドラ<br>
* このクラスはこのイベントに反応しないので何も記述しない。
*
* @param word 選択キーワード
* @return タブの最前面化をするなら真。さもなくば偽。
*/
public boolean handleKeywordSelection(String word) {
return false;
}
/**
* キーワードリストの更新イベントのハンドラ<br>
* このクラスはこのイベントに反応しないので何も記述しない。
*
* @param keywords キーワードリスト
* @return タブの最前面化をするなら真。さもなくば偽。
*/
public boolean handleKeywordsUpdate(List<String> keywords) {
return false;
}
/**
* テキストエリアのインスタンスを取得する
*
* @return テキストエリア
*/
private JTextArea getTextArea() {
if (textArea == null) {
textArea = new JTextArea();
textArea.setVisible(true);
textArea.setEditable(false);
textArea.setLineWrap(true);
}
return textArea;
}
/**
* JScrollPaneのインスタンスを取得する
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getScrollPane() {
if (scrollPane == null) {
scrollPane = new JScrollPane();
scrollPane
.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setViewportView(getTextArea());
}
return scrollPane;
}
public void setNotifier(ViewActionNotifier n) {
}
}
基本的にはIdbAの要求するコンポーネントリソース仕様に準じます。ainfo、cinfoはパッケージの中に含むリソースです。
jarの中に一つ必要です。
Name: plane-text.jar Version: 0.1 IconName: プレインテキストペイン IconImage: R0lGODlhIAAgALMAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A /wD//////yH5BAAAAAAALAAAAAAgACAAAwTY8Mk5gb0Y082z/wC3gWQmVmV6Sqm6HgAMg3Js r5KMICdSy7jHLfgLBQG84y/4ODAnNaYzydklh0QEljVzzp4wibZCZZmJwktSexGHjDgna/zg ISdaenwkru7gL3x1ZRVgFEY8hEJPOYV1d3iAUn1qdZGMUCI7l5hNOUhacjthnZ5NFnJ1B3qY qRt5rK1VoLGylrBWkjgaMxabfwSoLwcHDAsMgFZXBAMEBKGuxBPMoFVCzM5lxNK3xsibkQDG 2bcUiZbOx+IEDOzrC+TnifLoBOoX7Pbx5TwRADs= Vendor: アンテナプロジェクト Comment: プレインテキストペイン Grant: AllPermission
| Name | Jarの名称 |
| Version | バージョン文字列 |
| IconName | アイコン表示時のラベル |
| IconImage | アイコンのBase64エンコード文字列 |
| Vendor | 公開者の名称 |
| Comment | コメント |
| Grant | コンポーネントのパーミッション |
jarの中に一つ以上必要です。公開されるコンポーネントが列挙できます。
Name: jp.gr.linuxcons.richclient.antenna.view.pane.text.plane.TextPane Group: -jp.gr.linuxcons.richclient.antenna.view.pane.Pane UpgradeKey: jp.co.scio.idba.ms2.antenna2 Version: 1.0 Vendor: scio.co.jp Comment: プレインテキストペイン IconName: プレインテキストペイン IconResource: mainicon.gif
| Name | コンポーネントクラスの完全装飾名 |
| Group | グループ文字列(後述) |
| UpgradeKey | 更新時に利用されるキー文字列 |
| Version | バージョン文字列 |
| Vendor | 公開者の名称 |
| Comment | コメント |
| IconName | アイコン表示時のラベル |
| IconResource | アイコンファイル名 |
グループに継承型の完全装飾名を記すことでAntennaのコンポーネントとして検索されます。
Group: -jp.gr.linuxcons.richclient.antenna.view.pane.Pane
Eclipse上で実行するために下記のようにantenna-driver/package.listを記述します。
lib/basic.jar ../antenna/bin/ ../jdic-browser/bin/ ../default-view/bin/ # 下記のようにbinディレクトリにパスを通す ../plane-text/bin/ ../bidders-info/bin/ ../hatena-keyword/bin/ ../docking-view/bin/ ../lan-bookmark/bin/ ../scio-bookmark/bin/ ../hatena-rss-bookmarks/bin/
<target name="project-list"> ... <!-- components --> <antcall target="dist-project"> <param name="project.name" value="plane-text"/><!-- プロジェクト名 --> <param name="class.path" value="antenna.path"/> </antcall> ...
Eclipseのプロジェクト名、ainfo名、cinfo名を同一にしておくことでbuild.xmlを簡略化しています。