SWT Tips and Samples 基礎編 > CoolBar

 

CoolBar

CoolBarはToolBarが移動できる領域を表すウィジェットです。CoolBarを作るには少し長くなりますが、下のようなイディオムになります。CoolBarというCoolItemが移動できる領域を確保します。ToolBarを生成し、CoolItemにsetControlで参照を持たせるという流れです。CooItemはCoolBarという領域の内部でのみ移動可能です。またCoolItemのサイズは明示的に指定しないと正しく表示されません。ここでは、ToolBarのcomputeSizeメソッドでToolBarに含まれるすべてのボタンが表示されるときのサイズを得て、そのサイズの大きさだけCoolItemを表示するように指定しています。

CoolBar coolBar = new CoolBar(shell, SWT.NONE);
ToolBar toolBar = new ToolBar(coolBar, SWT.FLAT);
ToolItem titem1 = new ToolItem(toolBar, SWT.PUSH);
....
CoolItem citem1 = new CoolItem(coolBar, SWT.NONE);
citem1.setControl(toolBar);
Point toolBarSize = toolbar.computeSize(SWT.DEFAULT, SWT.DEFAULT);
Point coolItemSize = citem1.computeSize(toolBarSize);
citem1.setSize(coolItemSize);

コードで書くと複雑そうにみえますが、CoolBar、CoolItem、ToolBar、ToolItemの構造を概念図として表すと、このようになるでしょう。

サンプルプログラム

サンプルプログラムでは、Shellの上と下にCoolBarを、真ん中にTextを配置しています。上のCoolBarには二つのCooItemを追加しています。CoolItemはCoolBar内でしか移動できませんが、その様子が理解できると思います。

ソースコード (CoolBarTest.java)

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.*;

public class CoolBarTest {

        public static void main(String[] args) {
                new CoolBarTest();
        }
        public CoolBarTest() {
                Display display = new Display();
                Shell shell = new Shell(display);
                shell.setText("CoolBarTest");
                shell.setLayout(new GridLayout(1, true));

                GridData gd;
                CoolBar coolbar1 = new CoolBar(shell, SWT.NONE);
                gd = new GridData(GridData.FILL_HORIZONTAL);
                coolbar1.setLayoutData(gd);

                Text text = new Text(shell, SWT.MULTI | SWT.BORDER);
                gd = new GridData(GridData.FILL_BOTH);
                gd.horizontalSpan = 3;
                text.setLayoutData(gd);

                CoolBar coolbar2 = new CoolBar(shell, SWT.NONE);
                gd = new GridData(GridData.FILL_HORIZONTAL);
                coolbar2.setLayoutData(gd);

                //-----------------
                ToolBar tb1 = new ToolBar(coolbar1, SWT.FLAT);
                createToolItems(tb1);

                CoolItem citem1 = new CoolItem(coolbar1, SWT.NONE);
                citem1.setControl(tb1);

                Point ptb = tb1.computeSize(SWT.DEFAULT, SWT.DEFAULT);
                Point pcb = citem1.computeSize(ptb.x, ptb.y);
                citem1.setSize(pcb);

                //--------------------
                ToolBar tb2 = new ToolBar(coolbar1, SWT.NONE);
                createToolItems(tb2);

                CoolItem citem2 = new CoolItem(coolbar1, SWT.NONE);
                citem2.setControl(tb2);
                ptb = tb2.computeSize(SWT.DEFAULT, SWT.DEFAULT);
                pcb = citem2.computeSize(ptb.x, ptb.y);
                citem2.setSize(pcb);

                //--------------------
                ToolBar tb3 = new ToolBar(coolbar2, SWT.FLAT);
                createToolItems(tb3);

                CoolItem citem3 = new CoolItem(coolbar2, SWT.NONE);
                citem3.setControl(tb3);
                ptb = tb3.computeSize(SWT.DEFAULT, SWT.DEFAULT);
                pcb = citem3.computeSize(ptb.x, ptb.y);
                citem3.setSize(pcb);

                shell.setSize(300,300);
                shell.open();
                while (!shell.isDisposed()) {
                        if (!display.readAndDispatch()) {
                                display.sleep();
                        }
                }
                display.dispose();
        }
        private void createToolItems(ToolBar toolBar) {
                ToolItem item1 = new ToolItem(toolBar, SWT.PUSH);
                item1.setText("Push");

                ToolItem item2 = new ToolItem(toolBar, SWT.SEPARATOR);

                ToolItem item3 = new ToolItem(toolBar, SWT.CHECK);
                item3.setText("Check");

                ToolItem item4 = new ToolItem(toolBar, SWT.RADIO);
                item4.setText("Radio");
        }
}


最新更新日: 2004年9月1日
 
関連リンク
Eclipse API ドキュメント

- PR -

プレゼンテーション作成ソフト無料お試し版配信中

【Sony】大手他社よりも安い!ビジネス向け光・100Mしかも固定IP付!今なら更に初期費用最大15,000円OFF!

オフィス用品・オフィス家具 価 格 交 渉 可! 
◎ 目指せ★業界最安値 ★ ◎ オフィネット・ドットコム株式会社

注文から納品まで驚きの早さ!!【ASKULカタログ】はこちらから・・・

マイクロソフト お得な見積! まとめての購入ならオトクな方法で。ライセンスだから管理も簡単。


Copyright(C) 2003,2004 Jasmin Project. All Right Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送