隨筆 - 303  文章 - 883  trackbacks - 0
          <2007年2月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728123
          45678910

          歡迎光臨! 
          閑聊 QQ:1074961813

          隨筆分類(357)

          我管理的群

          公共blog

          • n維空間
          • Email : java3d@126.com 群 : 12999758

          參與管理的論壇

          好友的blog

          我的其他blog

          朋友的網站

          搜索

          •  

          最新評論

          ?????????
          寫得很有條理啊 呵呵

          ?

          ??1 import ?java.awt. * ;
          ??2 import ?java.awt.event. * ;
          ??3 import ?javax.swing.JPopupMenu;
          ??4 import ?javax.swing.JMenu;
          ??5 import ?javax.swing.JMenuItem;
          ??6 import ?javax.swing.JCheckBoxMenuItem;
          ??7 import ?javax.swing.JRadioButtonMenuItem;
          ??8 import ?javax.swing.ButtonGroup;
          ??9 import ?javax.swing.JMenuBar;
          ?10 import ?javax.swing.KeyStroke;
          ?11 import ?javax.swing.ImageIcon;?
          ?12
          ?13 import ?javax.swing.JPanel;
          ?14 import ?javax.swing.JTextArea;
          ?15 import ?javax.swing.JScrollPane;
          ?16 import ?javax.swing.JFrame;?
          ?17
          ?18 /* ?PopupMenuDemo.java?requires?images/middle.gif.? */ ?
          ?19
          ?20 /*
          ?21 ?*?Like?MenuDemo,?but?with?popup?menus?added.
          ?22 ? */

          ?23 public ? class ?PopupMenuDemo? implements ?ActionListener,?ItemListener? {?????? // 負責對點擊事件的監聽
          ?24 ????JTextArea?output;?????????????????????????????????????????????????????????????????????????????????????? // 負責輸出的變量
          ?25 ????JScrollPane?scrollPane;?????????????????????????????????????????????????????????????????????????????? // 創建畫板
          ?26 ????String?newline? = ? " \n " ;????????????????????????????????????????????????????????????????????????????????? // 每輸出一次,大回車?
          ?27
          ?28 ???? public ?JMenuBar?createMenuBar()? {???????????????????????????????????????????????????????????? // 創建菜單欄JMenuBar?函數
          ?29 ?????????????????????????????????????????????????????????????????????????
          ?30 ?????????????????????????????????????????????????????????????????????????? // 這里要解釋一下,J*?(如:JMenuBar)是swing提供的
          ?31 ?????????????????????????????????????????????????????????????????????????? // 而,?*?(如:MenuBar)是由awt提供的
          ?32 ????????JMenuBar?menuBar;
          ?33 ????????JMenu?menu,?submenu;
          ?34 ????????JMenuItem?menuItem;
          ?35 ????????JRadioButtonMenuItem?rbMenuItem;
          ?36 ????????JCheckBoxMenuItem?cbMenuItem;?
          ?37
          ?38 ???????? // Create?the?menu?bar.???????????????
          ?39 ????????menuBar? = ? new ?JMenuBar();?????????????????????????????????????????????????????????????????? // 創建菜單欄JMenuBar?
          ?40
          ?41 ???????? // Build?the?first?menu.
          ?42 ????????menu? = ? new ?JMenu( " A?Menu " );????????????????????????????????????????????????????????????? // 創建第一個menu
          ?43 ????????menu.setMnemonic(KeyEvent.VK_A);??????????????????????????????????????????????????? // 指定鍵盤助記符的?menu
          ?44 ????????menu.getAccessibleContext().setAccessibleDescription(
          ?45 ???????????????? " The?only?menu?in?this?program?that?has?menu?items " );???????????????????? // 第一個menu內容
          ?46 ????????menuBar.add(menu);?????????????????????????????????????????????????????????????????????????????? // 將menu加入菜單欄?
          ?47
          ?48 ???????? // a?group?of?JMenuItems?????????????????????????????????????????????????????????????????????????? // 下同
          ?49 ????????menuItem? = ? new ?JMenuItem( " A?text-only?menu?item " ,
          ?50 ?????????????????????????????????KeyEvent.VK_T);
          ?51 ???????? // menuItem.setMnemonic(KeyEvent.VK_T);? // used?constructor?instead
          ?52 ????????menuItem.setAccelerator(KeyStroke.getKeyStroke(
          ?53 ????????????????KeyEvent.VK_1,?ActionEvent.ALT_MASK));
          ?54 ????????menuItem.getAccessibleContext().setAccessibleDescription(
          ?55 ???????????????? " This?doesn't?really?do?anything " );
          ?56 ????????menuItem.addActionListener( this );
          ?57 ????????menu.add(menuItem);?
          ?58
          ?59 ????????ImageIcon?icon? = ?createImageIcon( " images/middle.gif " );???????????????????????? // 這里有圖片
          ?60 ????????menuItem? = ? new ?JMenuItem( " Both?text?and?icon " ,?icon);
          ?61 ????????menuItem.setMnemonic(KeyEvent.VK_B);
          ?62 ????????menuItem.addActionListener( this );
          ?63 ????????menu.add(menuItem);?
          ?64
          ?65 ????????menuItem? = ? new ?JMenuItem(icon);
          ?66 ????????menuItem.setMnemonic(KeyEvent.VK_D);
          ?67 ????????menuItem.addActionListener( this );
          ?68 ????????menu.add(menuItem);?
          ?69
          ?70 ???????? // a?group?of?radio?button?menu?items
          ?71 ????????menu.addSeparator();????????????????????????????????????? // 將新分隔符追加到菜單的末尾???????????????????????????????????????????????????????????????????????????????????
          ?72 ????????
          ?73 ????????ButtonGroup?group? = ? new ?ButtonGroup();??????????????????? // 創建Button集?
          ?74
          ?75 ????????rbMenuItem? = ? new ?JRadioButtonMenuItem( " A?radio?button?menu?item " );????? // 加入單選(1)
          ?76 ????????rbMenuItem.setSelected( true );
          ?77 ????????rbMenuItem.setMnemonic(KeyEvent.VK_R);
          ?78 ????????group.add(rbMenuItem);
          ?79 ????????rbMenuItem.addActionListener( this );?? // 設置事件監聽?????????????????????????????????
          ?80 ????????menu.add(rbMenuItem);?
          ?81
          ?82 ????????rbMenuItem? = ? new ?JRadioButtonMenuItem( " Another?one " );?????????????????? // 加入單選(2)
          ?83 ????????rbMenuItem.setMnemonic(KeyEvent.VK_O);
          ?84 ????????group.add(rbMenuItem);
          ?85 ????????rbMenuItem.addActionListener( this );
          ?86 ????????menu.add(rbMenuItem);?
          ?87
          ?88 ???????? // a?group?of?check?box?menu?items
          ?89 ????????menu.addSeparator();?????????????????????????????????????????????????? // 將新分隔符追加到菜單的末尾???
          ?90 ????????cbMenuItem? = ? new ?JCheckBoxMenuItem( " A?check?box?menu?item " );?????????? // 加入復選(1)
          ?91 ????????cbMenuItem.setMnemonic(KeyEvent.VK_C);
          ?92 ????????cbMenuItem.addItemListener( this );
          ?93 ????????menu.add(cbMenuItem);?
          ?94
          ?95 ????????cbMenuItem? = ? new ?JCheckBoxMenuItem( " Another?one " );????????????????????? // 加入復選(2)
          ?96 ????????cbMenuItem.setMnemonic(KeyEvent.VK_H);
          ?97 ????????cbMenuItem.addItemListener( this );
          ?98 ????????menu.add(cbMenuItem);?
          ?99
          100 ???????? // a?submenu???????????????????????????????????????????????????????????? // 創建具有子菜單的超級菜單
          101 ????????menu.addSeparator();?????????????????????????????
          102 ????????submenu? = ? new ?JMenu( " A?submenu " );??????????????????????????????????????? // 父menu?(submenu)
          103 ????????submenu.setMnemonic(KeyEvent.VK_S);?
          104
          105 ????????menuItem? = ? new ?JMenuItem( " An?item?in?the?submenu " );????????????????????? // 子?menu1?(menuItem)??????????
          106 ????????menuItem.setAccelerator(KeyStroke.getKeyStroke(
          107 ????????????????KeyEvent.VK_2,?ActionEvent.ALT_MASK));
          108 ????????menuItem.addActionListener( this );
          109 ????????submenu.add(menuItem);?
          110
          111 ????????menuItem? = ? new ?JMenuItem( " Another?item " );???????????????????????????????? // 子?menu2?(menuItem)
          112 ????????menuItem.addActionListener( this );
          113 ????????submenu.add(menuItem);
          114 ????????menu.add(submenu);?
          115
          116 ???????? // Build?second?menu?in?the?menu?bar.???????????????????????????????????? // 另一個菜單
          117 ????????menu? = ? new ?JMenu( " Another?Menu " );
          118 ????????menu.setMnemonic(KeyEvent.VK_N);
          119 ????????menu.getAccessibleContext().setAccessibleDescription(
          120 ???????????????? " This?menu?does?nothing " );
          121 ????????menuBar.add(menu);?
          122
          123 ???????? return ?menuBar;
          124 ????}
          ?
          125
          126 ???? public ?Container?createContentPane()? {??????????????????????????????????????? // 創建中間畫板
          127 ???????? // Create?the?content-pane-to-be.
          128 ????????JPanel?contentPane? = ? new ?JPanel( new ?BorderLayout());
          129 ????????contentPane.setOpaque( true );?
          130
          131 ???????? // Create?a?scrolled?text?area.
          132 ????????output? = ? new ?JTextArea( 5 ,? 30 );
          133 ????????output.setEditable( false );
          134 ????????scrollPane? = ? new ?JScrollPane(output);?
          135
          136 ???????? // Add?the?text?area?to?the?content?pane.
          137 ????????contentPane.add(scrollPane,?BorderLayout.CENTER);?
          138
          139 ???????? return ?contentPane;
          140 ????}
          ?
          141
          142 ???? public ? void ?createPopupMenu()? {?????????????????????????????????????????????? // 創建右擊菜單,,不懂請看我的另一篇文章?
          143
          144 ????????JMenuItem?menuItem;?
          145
          146 ???????? // Create?the?popup?menu.
          147 ????????JPopupMenu?popup? = ? new ?JPopupMenu();
          148 ????????menuItem? = ? new ?JMenuItem( " A?popup?menu?item " );
          149 ????????menuItem.addActionListener( this );
          150 ????????popup.add(menuItem);
          151 ????????menuItem? = ? new ?JMenuItem( " Another?popup?menu?item " );
          152 ????????menuItem.addActionListener( this );
          153 ????????popup.add(menuItem);?
          154
          155 ???????? // Add?listener?to?the?text?area?so?the?popup?menu?can?come?up.
          156 ????????MouseListener?popupListener? = ? new ?PopupListener(popup);
          157 ????????output.addMouseListener(popupListener);
          158 ????}
          ?
          159
          160 ???? public ? void ?actionPerformed(ActionEvent?e)? {????????????????????????????????????????????? // 創建菜單監聽
          161 ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? // 并做出相應的事件
          162 ????????JMenuItem?source? = ?(JMenuItem)(e.getSource());
          163 ????????String?s? = ? " Action?event?detected. "
          164 ??????????????????? + ?newline
          165 ??????????????????? + ? " ????Event?source:? " ? + ?source.getText()
          166 ??????????????????? + ? " ?(an?instance?of? " ? + ?getClassName(source)? + ? " ) " ;
          167 ????????output.append(s? + ?newline);
          168 ????????output.setCaretPosition(output.getDocument().getLength());
          169 ????}
          ?
          170
          171 ???? public ? void ?itemStateChanged(ItemEvent?e)? {?????????????????????????????????????????????? // 監聽多選框
          172 ????????JMenuItem?source? = ?(JMenuItem)(e.getSource());
          173 ????????String?s? = ? " Item?event?detected. "
          174 ??????????????????? + ?newline
          175 ??????????????????? + ? " ????Event?source:? " ? + ?source.getText()
          176 ??????????????????? + ? " ?(an?instance?of? " ? + ?getClassName(source)? + ? " ) "
          177 ??????????????????? + ?newline
          178 ??????????????????? + ? " ????New?state:? "
          179 ??????????????????? + ?((e.getStateChange()? == ?ItemEvent.SELECTED)? ?
          180 ????????????????????? " selected " : " unselected " );
          181 ????????output.append(s? + ?newline);
          182 ????????output.setCaretPosition(output.getDocument().getLength());
          183 ????}
          ?
          184
          185 ???? // ?Returns?just?the?class?name?--?no?package?info.
          186 ???? protected ?String?getClassName(Object?o)? {????????????????????????????????????????????? // 創建函數,獲取所調用的函數的名稱
          187 ????????String?classString? = ?o.getClass().getName();
          188 ???????? int ?dotIndex? = ?classString.lastIndexOf( " . " );
          189 ???????? return ?classString.substring(dotIndex + 1 );
          190 ????}
          ?
          191
          192 ???? /** ?Returns?an?ImageIcon,?or?null?if?the?path?was?invalid.? */
          193 ???? protected ? static ?ImageIcon?createImageIcon(String?path)? {??????????????????????????? // 調用前面的gif圖片
          194 ????????java.net.URL?imgURL? = ?PopupMenuDemo. class .getResource(path);
          195 ???????? if ?(imgURL? != ? null )? {
          196 ???????????? return ? new ?ImageIcon(imgURL);
          197 ????????}
          ? else ? {
          198 ????????????System.err.println( " Couldn't?find?file:? " ? + ?path);
          199 ???????????? return ? null ;
          200 ????????}

          201 ????}
          ?
          202
          203 ???? /**
          204 ?????*?Create?the?GUI?and?show?it.??For?thread?safety,
          205 ?????*?this?method?should?be?invoked?from?the
          206 ?????*?event-dispatching?thread.
          207 ????? */

          208 ???? private ? static ? void ?createAndShowGUI()? {?????????????????????????? // 創建所須GUI線程(控件),并進行設置
          209 ???????? // Create?and?set?up?the?window.
          210 ????????JFrame?frame? = ? new ?JFrame( " PopupMenuDemo " );
          211 ????????frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);?
          212
          213 ???????? // Create/set?menu?bar?and?content?pane.
          214 ????????PopupMenuDemo?demo? = ? new ?PopupMenuDemo();
          215 ????????frame.setJMenuBar(demo.createMenuBar());
          216 ????????frame.setContentPane(demo.createContentPane());?
          217
          218 ???????? // Create?and?set?up?the?popup?menu.
          219 ????????demo.createPopupMenu();?
          220
          221 ???????? // Display?the?window.
          222 ????????frame.setSize( 450 ,? 260 );
          223 ????????frame.setVisible( true );
          224 ????}
          ?
          225
          226 ???? public ? static ? void ?main(String[]?args)? {?????????????????????????????????? // 主函數
          227 ???????? // Schedule?a?job?for?the?event-dispatching?thread:
          228 ???????? // creating?and?showing?this?application's?GUI.
          229 ????????javax.swing.SwingUtilities.invokeLater( new ?Runnable()? {
          230 ???????????? public ? void ?run()? {
          231 ????????????????createAndShowGUI();
          232 ????????????}

          233 ????????}
          );
          234 ????}
          ?
          235
          236 ???? class ?PopupListener? extends ?MouseAdapter? {????????????????????????????????? // 右擊菜單監聽
          237 ????????JPopupMenu?popup;?
          238
          239 ????????PopupListener(JPopupMenu?popupMenu)? {
          240 ????????????popup? = ?popupMenu;
          241 ????????}
          ?
          242
          243 ???????? public ? void ?mousePressed(MouseEvent?e)? {
          244 ????????????maybeShowPopup(e);
          245 ????????}
          ?
          246
          247 ???????? public ? void ?mouseReleased(MouseEvent?e)? {
          248 ????????????maybeShowPopup(e);
          249 ????????}
          ?
          250
          251 ???????? private ? void ?maybeShowPopup(MouseEvent?e)? {
          252 ???????????? if ?(e.isPopupTrigger())? {
          253 ????????????????popup.show(e.getComponent(),
          254 ???????????????????????????e.getX(),?e.getY());
          255 ????????????}

          256 ????????}

          257 ????}

          258
          259
          260
          261 }
          ?
          262


          地震讓大伙知道:居安思危,才是生存之道。
          posted on 2007-02-25 10:29 小尋 閱讀(440) 評論(2)  編輯  收藏 所屬分類: j2se/j2ee/j2me

          FeedBack:
          # re: 菜單篇之~~老外杰作~~~~~~~~~~~~~~~~~注釋完成 2007-02-25 23:11 yanyan
          代碼最后少了一個}..  回復  更多評論
            
          # re: 菜單篇之~~老外杰作~~~~~~~~~~~~~~~~~注釋完成 2007-03-01 19:53 幻想~@@~
          恩 ,謝謝指正!  回復  更多評論
            
          主站蜘蛛池模板: 万荣县| 彭泽县| 虹口区| 新密市| 金塔县| 南平市| 兖州市| 禹州市| 诏安县| 连城县| 富裕县| 达拉特旗| 武功县| 彭山县| 五常市| 五峰| 张家港市| 安吉县| 巨野县| 隆子县| 策勒县| 儋州市| 西宁市| 常德市| 会同县| 东方市| 剑河县| 曲松县| 开远市| 五家渠市| 达日县| 班玛县| 正安县| 习水县| 龙门县| 田东县| 大庆市| 都兰县| 富阳市| 太保市| 清流县|