ツールバーは、メニューの下に表示される、小さいアイコンボタンの集合部分のことです。 アプリケーションを使用していると、わざわざメニューをプルダウンして実際の処理をクリックするという2度の操作よりも、 1度クリックするだけでいいので効率よく作業ができます。 さらにツールバーにはイメージを貼り付けることができます。 このイメージは、ルック&フィールの操作を大きく助けることもあります。
Toolbarは、SWTのウィジェットの1つです。 ToolbarはCompositeクラスを継承しており、コンテナとして使用します。 そのコンテナの中に格納できるのがToolItemです。
それでは、サンプルプログラムを示します。 サンプルプログラムでは、アイコンを使用します。 アイコンであれば何でもいいのですが、一応実験的に使用するアイコンはこちらで用意したので、 適当なものがなければダウンロードして下さい。 [ アイコン ( zip ) ]
今回のプログラムを動作させるためには、クラスファイルとアイコンを、 以下の位置関係に配置しておく必要があります。
+-カレントディレクトリ +-ToolBarSample.class +-sample.ico
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class ToolBarSample extends ApplicationWindow {
public ToolBarSample() {
super(null);
}
protected Control createContents(Composite parent) {
// ツールバーのコンテナの作成
ToolBar toolbar = new ToolBar(parent, SWT.HORIZONTAL);
// ツールアイテムを作成して、それぞれツールバーに格納
ToolItem push = new ToolItem(toolbar, SWT.PUSH);
push.setText("push");
push.setToolTipText("this is a push widget");
ToolItem icoPush = new ToolItem(toolbar, SWT.PUSH);
icoPush.setImage(new Image(Display.getCurrent(),
this.getClass().getResource("./sample.ico").getPath()));
icoPush.setToolTipText("this is an imaging push widget");
ToolItem check = new ToolItem(toolbar, SWT.CHECK);
check.setText("check");
check.setToolTipText("this is a check widget");
ToolItem radio1 = new ToolItem(toolbar, SWT.RADIO);
radio1.setText("radio1");
radio1.setToolTipText("this is a radio widget");
ToolItem radio2 = new ToolItem(toolbar, SWT.RADIO);
radio2.setText("radio2");
radio2.setToolTipText("this is a radio widget");
return parent;
}
public static void main(String[] args) {
Window w = new ToolBarSample();
w.setBlockOnOpen(true);
w.open();
Display.getCurrent().dispose();
}
}
実行すると、いくつかのボタンが表示されていると思います。
pushと書いてあるボタンは、SWT.PUSHのスタイルのツールアイテムなので、いつでも押すことができます。
次のアイコンのボタンも、SWT.PUSHなので、同じふるまいをします。
その次のcheckは、SWT.CHECKのスタイルなので、見た目はボタンですが、へこんだり戻ったりします。
つまり状態を2つもっているということです。これは、チェックボックスの振る舞いと同じですね。
そしてradio1とradio2ですが、これらはそれぞれSWT.RADIOのスタイルで作成しているので、
一見してチェックボックスのような動作をしますが、どちらか一方しか選択できません。
ToolItemには、addSelectionListener(SelectionListener)メソッドが用意されています。 SelectionListenerを登録することによって、ToolItemがクリックされた場合に、 イベントを受け取ることができるようになります。

import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class ToolItemEventSample extends ApplicationWindow {
private static StatusLineManager statusLineManager = new StatusLineManager();
public ToolItemEventSample() {
super(null);
addStatusLine();
}
protected Control createContents(Composite parent) {
ToolBar toolbar = new ToolBar(parent, SWT.WRAP);
ToolItem item1 = new ToolItem(toolbar, SWT.PUSH);
item1.setText("item1");
item1.setToolTipText("push this button!");
item1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
statusLineManager.setMessage("item1 pressed");
}
});
toolbar.pack();
return parent;
}
protected StatusLineManager createStatusLineManager() {
return statusLineManager;
}
public static void main(String[] args) {
Window w = new ToolItemEventSample();
w.setBlockOnOpen(true);
w.open();
Display.getCurrent().dispose();
}
}