posts - 28,  comments - 15,  trackbacks - 0
          • 介紹
            菜單(Menu類、MenuItem類)是常用的SWT組件,Menu是一個菜單欄,也是一個容器,可以容納MenuItem。Menu的容器作用主要體現在以下兩個方面:

                     1.作為整個菜單體系的容器。
                     2.作為同一菜單欄下多級菜單的分割容器。

            在下面的代碼中您將認識到這一點。

           

          • 式樣

                   Menu式樣
                   SWT.BAR   : 菜單欄,用于主菜單。
                   SWT.DROP_DOWN   : 下拉菜單用于子菜單。
                   SWT.POP_UP   :   鼠標右鍵彈出式菜單。

                   MenuItem式樣
                   SWT.CASCADE   : 有子菜單的菜單項。
                   SWT.CHECK   : 選中后前面帶小鉤。
                   SWT.PUSH   :   普通型菜單項。
                   SWT.RADIO   :   選中后前面帶一小點。
                   SWT.SEPERATOR   : ---- 分隔符.

               演示代碼

          public class MethodUtil {
           
           
            public void buildMenus(){
             
                Display display = new Display();
                Shell shell = new Shell(display);
             
                Label label = new Label(shell,SWT.BORDER|SWT.RIGHT);
                label.setBounds(10, 10, 120, 140);
                label.setText("這里是標簽");
                label.setFont(new Font(display,"宋體",14,SWT.BOLD));
                label.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
             
                //這里指定是主菜單,且菜單方向是從右到左排列
                Menu mainMenu = createMenu(shell, SWT.BAR|SWT.RIGHT_TO_LEFT);
                shell.setMenuBar(mainMenu);
             
                MenuItem fileMenuItem = createMenuItem(mainMenu, SWT.CASCADE, "文件&F", null, SWT.CONTROL+'f', true, null);
                Menu fileMenu = createMenu(shell, SWT.DROP_DOWN, fileMenuItem, true);
                MenuItem createItem = createMenuItem(fileMenu, SWT.CASCADE, "新建&C", null, SWT.CONTROL+'c', true, null);
                Menu createMenu = createMenu(shell, SWT.DROP_DOWN, createItem, true);
             
                /*采用反射機制調用調用事件處理方法*/
                Class[] c = new Class[1];
                Object[] o = new Object[1];
                c[0] = Label.class;
                o[0] = label;
                MenuItem createProject = createMenuItem(createMenu, SWT.PUSH, "項目\tControl+Shit+N", null, SWT.CONTROL+SWT.SHIFT+'N', true, "changeContent",c,o);
                MenuItem createPackege = this.createMenuItem(createMenu, SWT.PUSH, "包&I", null, SWT.CONTROL+'I', true, null);
                MenuItem createClass = this.createMenuItem(createMenu, SWT.PUSH, "類&K", null, SWT.CONTROL+'K', true, null);
             
                MenuItem open = this.createMenuItem(fileMenu, SWT.PUSH, "打開&S", null, SWT.CONTROL+'S', true, null);
                MenuItem exit = this.createMenuItem(fileMenu, SWT.PUSH, "關閉&S", null, SWT.CONTROL+'M', true, null);
             
                MenuItem help = this.createMenuItem(mainMenu, SWT.PUSH, "幫助&H", null, SWT.CONTROL+'H', true, null);
             

                shell.pack();
                shell.open();
             
                while(!shell.isDisposed()){
                    if(!display.readAndDispatch()){
                        display.sleep();
                 }
                }
             
                display.dispose();
               }
            
            public void changeContent(Label label){
             label.setText("我變,我變,我變變變!創建工程!");
            }

            protected Menu createMenu(Menu parent, boolean enabled) {
                Menu m = new Menu(parent);
                m.setEnabled(enabled);
                return m;
            }
            protected Menu createMenu(MenuItem parent, boolean enabled) {
                Menu m = new Menu(parent);
                m.setEnabled(enabled);
                return m;
            }
            protected Menu createMenu(Shell parent, int style) {
                Menu m = new Menu(parent, style);
                return m;
            }
            protected Menu createMenu(Shell parent, int style,
                                      MenuItem container, boolean enabled) {
                Menu m = createMenu(parent, style);
                m.setEnabled(enabled);
                container.setMenu(m);
                return m;
            }
            protected Menu createPopupMenu(Shell shell) {
                Menu m = new Menu(shell, SWT.POP_UP);
                shell.setMenu(m);
                return m;
            }
            protected Menu createPopupMenu(Shell shell, Control owner) {
                Menu m = createPopupMenu(shell);
                owner.setMenu(m);
                return m;
            }
            
            protected MenuItem createMenuItem(Menu parent, int style, String text,
                          Image icon, int accel, boolean enabled,
                          String callback,Class[] c,Object[] o){
             MenuItem mi = new MenuItem(parent, style);
                if (text != null) {
                    mi.setText(text);
                }
                if (icon != null) {
                    mi.setImage(icon);
                }
                if (accel != -1) {
                    mi.setAccelerator(accel);
                }
                mi.setEnabled(enabled);
                if (callback != null) {
                    registerCallback(mi, this, callback,c,o);
                }
                return mi;
            }
            protected MenuItem createMenuItem(Menu parent, int style, String text,
                                              Image icon, int accel, boolean enabled,
                                              String callback) {
                MenuItem mi = new MenuItem(parent, style);
                if (text != null) {
                    mi.setText(text);
                }
                if (icon != null) {
                    mi.setImage(icon);
                }
                if (accel != -1) {
                    mi.setAccelerator(accel);
                }
                mi.setEnabled(enabled);
                if (callback != null) {
                    registerCallback(mi, this, callback);
                }
                return mi;
            }

            protected void registerCallback(final MenuItem mi,
                       final Object handler,
                       final String handlerName) {
             mi.addSelectionListener(new SelectionAdapter() {
              public void widgetSelected(SelectionEvent e) {
               try {
               Method m = handler.getClass().getMethod(handlerName, null);
               m.invoke(handler, null);
               }
               catch (Exception ex) {
               ex.printStackTrace();
               }
              }
             });
            }
            
            protected void registerCallback(final MenuItem mi,final Object handler,final String handlerName,final Class[] cs,final Object[] params){
             mi.addSelectionListener(new SelectionAdapter() {
              public void widgetSelected(SelectionEvent e) {
               try {
               Method m = handler.getClass().getMethod(handlerName, cs);
               m.invoke(handler, params);
               }
               catch (Exception ex) {
               ex.printStackTrace();
               }
              }
             });
            }
           
          }

          /*調用測試*/
          public class MenuTestDesign {
           
           public static void main(String[] arg){
            
            
            MethodUtil u = new MethodUtil();
            u.buildMenus();
            
           }

          }

          運行結果:



          posted on 2009-08-13 17:01 zhangxl 閱讀(1176) 評論(0)  編輯  收藏 所屬分類: SWT、SWING、AWT

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類(17)

          隨筆檔案(28)

          文章分類(30)

          文章檔案(30)

          相冊

          收藏夾(2)

          hibernate

          java基礎

          mysql

          xml

          關注

          壓力測試

          算法

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 96364
          • 排名 - 601

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 阿瓦提县| 西吉县| 徐闻县| 吴川市| 聊城市| 福贡县| 满洲里市| 长兴县| 同心县| 嘉荫县| 新沂市| 集贤县| 武清区| 赤峰市| 沾益县| 滨海县| 平凉市| 武汉市| 柳河县| 永善县| 清徐县| 阳山县| 图们市| 那曲县| 镇江市| 通山县| 井研县| 龙胜| 涞源县| 常熟市| 泗阳县| 辉南县| 扶绥县| 眉山市| 贵阳市| 商水县| 全州县| 阳春市| 永安市| 瑞安市| 民丰县|