迷你大刀(JFrame迷你化)

          半夜1點了 廢話不多說

          效果圖:    雙擊以后

          思路其實很簡單...代碼也很少..我也加了少量的注釋..看不懂的話..加QQ群..教你

          package MiniMizeHack;

          import java.awt.BorderLayout;
          import java.awt.Dimension;
          import java.awt.Point;
          import java.awt.event.ActionEvent;
          import java.awt.event.ActionListener;
          import java.awt.event.MouseEvent;
          import java.awt.event.MouseListener;

          import javax.swing.ImageIcon;
          import javax.swing.JFrame;
          import javax.swing.JLabel;
          import javax.swing.JMenu;
          import javax.swing.JMenuBar;
          import javax.swing.JMenuItem;
          import javax.swing.JPanel;
          import javax.swing.JPopupMenu;

          public class MiniMize implements MouseListener, ActionListener {

              
          public JFrame frame;
              
          public JPanel panel;
              
          public JPopupMenu popup;

              
          public JMenuBar menubar;
              
          public JLabel top;
              
          public JLabel bottom;

              
          public MiniMize( ) {
                  top 
          = new JLabel(new ImageIcon("Image/b3.gif"));
                  bottom 
          = new JLabel("More configuration here");

                  frame 
          = new JFrame("Mini Mize");
                  panel 
          = new JPanel( );
                  panel.setLayout(
          new BorderLayout( ));
                  panel.add(
          "North",top);
                  panel.addMouseListener(
          this);
                  frame.getContentPane().add(panel);
                  frame.addMouseListener(
          this);

                  menubar 
          = new JMenuBar( );
                  JMenu menu 
          = new JMenu("File");
                  menu.add(
          new JMenuItem("Open"));
                  menu.add(
          new JMenuItem("Quit"));
                  menubar.add(menu);

                  JMenu window 
          = new JMenu("Window");
                  JMenuItem mini 
          = new JMenuItem("Minimize");
            
          //      mini.addActionListener(this);
                  window.add(mini);
                  menubar.add(window);
                  frame.setJMenuBar(menubar);

                  popup 
          = new JPopupMenu( );
                  JMenuItem restore 
          = new JMenuItem("Restore");
            
          //      restore.addActionListener(this);
                  popup.add(restore);
              }


              
          public void mousePressed(MouseEvent e) {
                  maybeShowPopup(e);
              }


              
          public void mouseReleased(MouseEvent e) {
                  maybeShowPopup(e);
              }

              
          public void mouseExited(MouseEvent e) { }
              
          public void mouseEntered(MouseEvent e) { }
              
          public void mouseClicked(MouseEvent e) 
                  
          //=1 就是單擊  =2 就是雙擊
                  if(e.getClickCount()==1){
                      
                  }

                  
          if(e.getClickCount()==2){
                      
          //判斷bottom是否顯示(廢話);
                      if(bottom.isVisible()) {
                  
          //        方法調用
                            switchToMini();
                         }
           else {
                             switchToNormal();
                         }

                  }

              }

              
              
          private void maybeShowPopup(MouseEvent e) {
                  
                  
          if (e.isPopupTrigger()) {
                      popup.show(e.getComponent( ),
                                 e.getX(), e.getY());
                  }


              }

              
          public void actionPerformed(ActionEvent evt) {
                 
              }

              
          private Dimension normal_size;
              
              
          public void switchToMini( ) {
                  
                  Point location 
          = frame.getLocation( );
                  
          //這個獲得frame的Dimension給normal_size(
                  
          //我感覺這樣的變量名我不用解釋)一看就懂..(嘿嘿^v^);
                  normal_size = frame.getSize( );
                  frame.setVisible(
          false);
                  frame 
          = new JFrame( );
                  frame.setUndecorated(
          true);
                  frame.getContentPane( ).add(panel);
                  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                  bottom.hide( );
                  frame.setAlwaysOnTop(
          true);

                  
          // 顯示frame 最近越來越喜歡frame.pack();了
                  frame.pack( );
                  frame.setLocation(location);
                  frame.setVisible(
          true);

              }

              
          public void switchToNormal() {
                  
          //這方法的代碼 跟SwitchToMini大體一樣..自己應該能理解
                  Point location = frame.getLocation( );
                  frame.setVisible(
          false);
                  frame 
          = new JFrame( );
                  frame.setUndecorated(
          false);
                  frame.getContentPane( ).add(panel);
                  
                  bottom.show();
                  frame.setJMenuBar(menubar);
                  frame.setAlwaysOnTop(
          false);

                  frame.pack();
                  frame.setSize(normal_size);
                  frame.setLocation(location);
                  frame.setVisible(
          true);
              }

              
          public static void main(String[] args) {
                  MiniMize mini 
          = new MiniMize( );
                  mini.frame.pack( );
                  mini.frame.setSize(
          300,300);
                  mini.frame.setVisible(
          true);
              }

          }


          posted on 2008-05-30 01:12 相信 閱讀(738) 評論(1)  編輯  收藏 所屬分類: Swing文章

          評論

          # re: 迷你大刀(JFrame迷你化) 2008-05-30 02:37 晴天

          // 顯示frame 最近越來越喜歡frame.pack();了

          我一般是寫一個靜態類,然后傳幾個參數進去,隨便弄個窗體出來的,代碼重用的.
          沒那么多時間每次寫顯示Jframe那幾行代碼啊....還要玩游戲呢~~  回復  更多評論   

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          公告

          不顯示applet

          常用鏈接

          留言簿(16)

          我參與的團隊

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          swingchina 專業搞Swing的網站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 内丘县| 乐山市| 景谷| 合江县| 鹤峰县| 探索| 筠连县| 信阳市| 信宜市| 扎赉特旗| 黔西| 六安市| 斗六市| 唐海县| 响水县| 苏州市| 沅江市| 腾冲县| 宁明县| 贵阳市| 银川市| 六枝特区| 都江堰市| 遂宁市| 双牌县| 广灵县| 灵璧县| 和田市| 滁州市| 山阳县| 修文县| 鄂托克前旗| 清河县| 怀远县| 临高县| 马边| 大厂| 龙井市| 建阳市| 南丰县| 沾化县|