第5回:リッチなシステムを作りこみやすいように進化 (2/3)
 |
|
|
|
前のページ 1 2 3 次のページ
|
 |
| 展開バー
|
今回のバージョンから新しく展開バーが使えるようになりました。これは、ユーザの必要とするアイテムのみを表示することができるインターフェースです。
展開バーの中に複数のアイテムを配置でき、各アイテムは右端にある展開ボタンをクリックすることにより、アイテムの中身を表示・非表示と切り替えることができます。
次にアイテム1つを表示させる展開バーのサンプルコードを示します。
// 展開バー
final ExpandBar expandBar = new ExpandBar(shell, SWT.V_SCROLL);
expandBar.setSpacing(8);
// アイテムに載せるウィジェット
Composite composite1 = new Composite (expandBar, SWT.NONE);
GridLayout layout1 = new GridLayout ();
layout1.marginLeft = layout1.marginTop = layout1.marginRight = layout1.marginBottom = 10;
layout1.verticalSpacing = 10;
composite1.setLayout(layout1);
Text text1 = new Text(composite1, SWT.MULTI);
text1.setText("・はじめに\n・Callisto\n・Eclipse 3.2 プラットフォームのインストール");
// 展開バーのアイテム
ExpandItem item1 = new ExpandItem (expandBar, SWT.NONE, 0);
// アイテムのタイトル
item1.setText("第1回 より洗練されたEclipse 3.2がついにリリース");
item1.setHeight(composite1.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
// アイテムに載せるウィジェットを設定
item1.setControl(composite1);
// アイテムにイメージを表示
item1.setImage(image);
// アイテムを展開済みに設定
item1.setExpanded(true);

図3:展開バーにアイテムを4つ表示(内3つは展開済み)
|
| テキストのドラッグ&ドロップ対応(Text/StyledText)
|
org.eclipse.swt.widgets.Textおよび、org.eclipse.swt.custom.StyledTextで、SWT.DragDetectイベントが扱えるようになりテキストのドラッグ&ドロップの実装が可能となりました。
ドラッグ&ドロップの実装方法は、各ウィジェットに対して、次のようなアダプタをリスナとしてセットします。
org.eclipse.swt.dnd.DragSourceAdapter(ドラッグ操作)
org.eclipse.swt.dnd.DropTargetAdapter(ドロップ操作)
次に示すのは、styledText1に対してドラッグ機能を実装したサンプルコードです。
// ドラッグ機能
DragSource source = new DragSource(styledText1, DND.DROP_COPY | DND.DROP_MOVE);
source.setTransfer(new Transfer[] {TextTransfer.getInstance()});
source.addDragListener(new DragSourceAdapter() {
// 選択範囲
Point selection;
// ドラッグ開始処理
public void dragStart(DragSourceEvent e) {
// 選択範囲を記憶
selection = getText1().getSelection();
// 選択範囲が無ければ処理せず
e.doit = selection.x != selection.y;
}
// ドラッグされたテキストをイベントにセット
public void dragSetData(DragSourceEvent e) {
e.data = getText1().getText(selection.x, selection.y-1);
}
// ドロップ時の処理
public void dragFinished(DragSourceEvent e) {
// ドロップ先へ移動の場合はドラッグ箇所をクリア
if (e.detail == DND.DROP_MOVE) {
getText1().replaceTextRange(selection.x, selection.y - selection.x, "");
}
// 選択範囲をクリア
selection = null;
}
});
次に示すのは、styledText2に対してドロップ機能を実装したサンプルコードです。
// ドロップ機能
int style = DND.DROP_DEFAULT | DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
DropTarget target = new DropTarget(styledText2, style);
target.setTransfer(new Transfer[] {TextTransfer.getInstance()});
target.addDropListener(new DropTargetAdapter() {
// ドラッグ中のカーソルが入ってきた時の処理
public void dragEnter(DropTargetEvent e) {
// 修飾キーを押さない場合のドラッグ&ドロップはコピー
if (e.detail == DND.DROP_DEFAULT)
e.detail = DND.DROP_COPY;
}
// ドラッグ中に修飾キーが押されて処理が変更された時の処理
public void dragOperationChanged(DropTargetEvent e) {
// 修飾キーを押さない場合のドラッグ&ドロップはコピー
if (e.detail == DND.DROP_DEFAULT)
e.detail = DND.DROP_COPY;
}
// カーソル位置にテキストをドロップ
public void drop(DropTargetEvent e) {
getText2().insert((String)e.data);
}});

図4:上部StyledTextから下部StyledTextへテキストをドラッグ中

図5:上部StyledTextから下部StyledTextへテキストをドロップ
|
前のページ 1 2 3 次のページ
|

|
|

|
著者プロフィール
ビーブレイクシステムズ 川崎 博之
芝浦工業大学 工学部卒業。学生時代よりJavaに興味を持ち、Java専業ソフトハウスである黎明期のビーブレイクシステムズに入社し、現在に至る。入社当時はPMから直接厳しい指導を受け、机上の勉強とは違う実際の業務システム開発の難しさに戸惑いを覚えたが現在は主任Java開発者として活躍し、Javaアーキテクトを目指し、日々修行中。
|
|
|
|
|
|
|
|