Samples > ポップアップメニューを作成する(SWT編)

 

ポップアップメニューを作成する(SWT編)

ウィジェットを右クリックすることで表示されるポップアップメニューを作るには、Menuクラスを使用します。これはウィンドウのメニューバーで使用したものと同じクラスです。ポップアップメニューで表示するときは、Menuクラスのコンストラクタ引き数にSWT.POP_UPを指定します。そのMenuにMenuItemを追加して、Control#setMenuメソッドで任意のウィジェットにMenuをセットします。メニューアイテムが選択されたときの動作は、addSelectionListenerでイベントハンドリングをします。

Shell shell = new Shell(...);
Text text = new Text(shell, ...);
...
Menu menu = new Menu(shell, SWT.POP_UP);
MenuItem item = new MenuItem(menu, SWT.PUSH);
item.setText("...");
item.addSelectionListener(new SelectionAdapter(){
   public void widgetSelected(SelectionEvent e) {
       //メニューアイテムが選択されたときの処理
       ...
   }
});
...
text.setMenu(menu);

またJFaceのMenuManagerを使ってメニューを作成することもできます。この場合は、Actionクラスでメニューアイテム選択時のイベント処理を記述し、それをMenuManagerに登録するという形になります。詳しくは、「ポップアップメニューを作成する (JFace編)」を参照してください。

サンプルプログラム

以下のサンプルは、StyledTextにポップアップメニューを表示しています。メニューから文字の前景色を変えたり、ワードラップのオン・オフを切り替えることができます。

ソースコード (PopupMenuTest.java)

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.*;

public class PopupMenuTest {

        public static void main(String[] args) {
                new PopupMenuTest();
        }
        public PopupMenuTest() {
                final Display display = new Display();
                Shell shell = new Shell(display);
                shell.setText("PopupMenuTest");
                shell.setLayout(new RowLayout());

                final StyledText text = new StyledText(shell, SWT.BORDER | 
                                                       SWT.MULTI | 
                                                       SWT.H_SCROLL | 
                                                       SWT.V_SCROLL);
                text.setLayoutData(new RowData(200, 100));
                text.setText("ポップアップメニューのテスト");
                
                Menu menu = new Menu(shell, SWT.POP_UP);

                MenuItem itemRed = new MenuItem(menu, SWT.PUSH);
                itemRed.setText("Red");
                itemRed.addSelectionListener(new SelectionAdapter() {
                        public void widgetSelected(SelectionEvent e) {
                                text.setForeground(display.getSystemColor(SWT.COLOR_RED));
                        }
                });

                MenuItem itemBlack = new MenuItem(menu, SWT.PUSH);
                itemBlack.setText("Black");
                itemBlack.addSelectionListener(new SelectionAdapter() {
                        public void widgetSelected(SelectionEvent e) {
                                text.setForeground(display.getSystemColor(SWT.COLOR_BLACK));
                        }
                });

                MenuItem itemSeparator = new MenuItem(menu, SWT.SEPARATOR);
                MenuItem itemWrap = new MenuItem(menu, SWT.RADIO);
                itemWrap.setText("Word Wrap");
                itemWrap.addSelectionListener(new SelectionAdapter() {
                        public void widgetSelected(SelectionEvent e) {
                                boolean b = text.getWordWrap();
                                text.setWordWrap(!b);
                        }
                });             
                
                text.setMenu(menu);
                
                shell.pack();
                shell.open();
                while (!shell.isDisposed()) {
                        if (!display.readAndDispatch()) {
                                display.sleep();
                        }
                }
                display.dispose();
        }
}



最新更新日: 2005年6月13日
 
関連リンク
Eclipse API ドキュメント

- PR -

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

シマンテック 割引価格! オンライン販売だから低価格。いつでも簡単、見積・購入。

■原石のままでは、終わりたくない貴方へ!キャリアアップ転職を成功へとナビゲート

秋葉原・なんば・名古屋・札幌に店舗を構えるパソコンショップ!【ツクモ】


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