<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    有才華的人,別忘記給滋潤你的那塊土壤施肥

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      28 隨筆 :: 5 文章 :: 147 評論 :: 0 Trackbacks
            有很多剛開始學Swing的人經常問JFrame關閉的時候先詢問下是否關閉,即彈出一個對話框讓用戶點擊選擇YES或NO,其實稍微進去查看源代碼就能找到答案。我們找到那里是發出關閉事件的地方,我們在那個地方進行攔截就可以了,查看源代碼可以知道在JFrame中有這么一個方法:
    protected void processWindowEvent(WindowEvent e) {
       
    //do Samething。。。。。。。。。。。。。
    }

           這個方法一直追上去可以發現它是由Window類中派生出來的,我們先看一張圖:

          從圖上看以看出我們常用的JFrame和JDialog都上由Window派生出來的,那么所有基于Window下的窗口點擊關閉按鈕都是在上述的那個方法中進行判斷,那么我們重寫那個方法,在里面進行攔截如:
    /***
         * 重寫此方法讓用戶確認是否需要關閉
         * 
    */

        @Override
        
    protected void processWindowEvent(WindowEvent e) {
            
    boolean flag = false;
            
            
    if (e.getID() == WindowEvent.WINDOW_CLOSING) 
              
    //關閉的提示選擇
              int result= JOptionPane.showConfirmDialog(
                                  
    this,
                                  (
    "確認要關閉嗎?"),
                                  (
    "關閉"),
                                  JOptionPane.YES_NO_OPTION);

                  
    if(result == JOptionPane.NO_OPTION){
                      
    //不關閉,系統托盤????
                      flag = true;
                  }
    else{
                      
    //關閉的處理
                  }

            }

             
    if(!flag){
               
    //點擊的了YES,那么交給上面去處理關閉的處理
                super.processWindowEvent(e);
              }

         }
       
          對于JInternalFrame,它是一個輕量級組件,所以它的確認關閉需要做其他處理,查找API就會很發現有這么個方法:doDefaultCloseAction
    是處理關閉事件的處理,如果您不放心確實是這個方法,那么你就去找那個關閉按鈕發事件的地方才放心的話,那么我們也很容易找到在
    JInternalFrame的Title是由BasicInternalFrameTitlePane這個類中負責繪制的,這里就有點擊關閉調用doDefaultCloseAction方法的,既然如此那么重寫這方法就OK了,代碼如下:
    /***
                 * 重寫此方法讓用戶確認是否需要關閉
                 * 
    */

                @Override
                
    public void doDefaultCloseAction(){
                    
    //關閉的提示選擇
                    int result= JOptionPane.showConfirmDialog(
                              
    this,
                              (
    "確認要關閉JInternalFrame嗎?"),
                              (
    "關閉"),
                              JOptionPane.YES_NO_OPTION);

                      
    if(result == JOptionPane.YES_OPTION){
                          
    //如果選擇YES,交由上層設置的關閉處理
                          super.doDefaultCloseAction();
                      }

                }

    總的測試代碼如下:
    import java.awt.event.WindowEvent;
    import javax.swing.JButton;
    import javax.swing.JDesktopPane;
    import javax.swing.JFrame;
    import javax.swing.JInternalFrame;
    import javax.swing.JOptionPane;
    import javax.swing.SwingUtilities;

    /***
     * JFrame和JInternalFrame關閉前先確認是否關閉
     * 
    @author kissjava
     * www.tkk7.com/kissjava
     * *
    */

    public class CloseFrameDemo extends JFrame{

        
    public CloseFrameDemo(){
            
    this.setTitle("CloseFrameDemo");
            jbInit();
            
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            
    this.setSize(800800);
            
    this.setVisible(true);
        }

        
        
    private void jbInit(){
            JDesktopPane desktop 
    = new JDesktopPane();
            JInternalFrame internalFrame 
    = this.createJInternalFrame();
            JButton btn 
    = new JButton("DEMO");
            internalFrame.add(btn, 
    "Center");
            desktop.add(internalFrame, JDesktopPane.PALETTE_LAYER);
            internalFrame.setSize(
    400,400);
            internalFrame.setVisible(
    true);
            
    this.add(desktop, "Center");
        }

        
        
    private JInternalFrame createJInternalFrame(){
            JInternalFrame internalFrame 
    = new JInternalFrame("JInternalFrame Close Demo"truetruetruetrue){
                
    /***
                 * 重寫此方法讓用戶確認是否需要關閉
                 * 
    */

                @Override
                
    public void doDefaultCloseAction(){
                    
    //關閉的提示選擇
                    int result= JOptionPane.showConfirmDialog(
                              
    this,
                              (
    "確認要關閉JInternalFrame嗎?"),
                              (
    "關閉"),
                              JOptionPane.YES_NO_OPTION);

                      
    if(result == JOptionPane.YES_OPTION){
                          
    //如果選擇YES,交由上層設置的關閉處理
                          super.doDefaultCloseAction();
                      }

                }

            }
    ;
            
    return internalFrame;
        }


        
    /***
         * 重寫此方法讓用戶確認是否需要關閉
         * 
    */

        @Override
        
    protected void processWindowEvent(WindowEvent e) {
            
    boolean flag = false;
            
            
    if (e.getID() == WindowEvent.WINDOW_CLOSING) 
              
    //關閉的提示選擇
              int result= JOptionPane.showConfirmDialog(
                                  
    this,
                                  (
    "確認要關閉嗎?"),
                                  (
    "關閉"),
                                  JOptionPane.YES_NO_OPTION);

                  
    if(result == JOptionPane.NO_OPTION){
                      
    //不關閉,系統托盤????
                      flag = true;
                  }
    else{
                      
    //關閉的處理
                  }

            }

             
    if(!flag){
               
    //點擊的了YES,那么交給上面去處理關閉的處理
                super.processWindowEvent(e);
              }

         }


        
    public static void main(String[] args) {
            
    // TODO Auto-generated method stub
            SwingUtilities.invokeLater(new Runnable(){
                
    public void run(){
                    
    new CloseFrameDemo();
                }

            }
    ) ;
        }

    }

    posted on 2009-08-14 22:58 kissjava 閱讀(2625) 評論(0)  編輯  收藏 所屬分類: swing
    主站蜘蛛池模板: 亚洲国产成AV人天堂无码| 亚洲av无码国产精品夜色午夜 | 亚洲成a人片在线观| 国产精品亚洲四区在线观看| 亚洲AV日韩综合一区| 久久国产乱子伦精品免费午夜| 免费观看一区二区三区| 人成午夜免费视频在线观看| 日韩亚洲国产二区| 国产av无码专区亚洲av果冻传媒| 亚洲熟妇色自偷自拍另类| 免费的黄色的网站| 国产成人精品免费视| 四虎影视精品永久免费网站| 亚洲人成在线电影| 黄色免费网址大全| 免费大片黄在线观看yw| 亚洲а∨天堂久久精品9966| 午夜不卡久久精品无码免费| 国产在线98福利播放视频免费| 亚洲人成人一区二区三区| 日本亚洲欧美色视频在线播放 | JLZZJLZZ亚洲乱熟无码| 亚洲国产欧美国产综合一区| 久久99国产综合精品免费| 国产亚洲精品自在久久| 美女免费视频一区二区| 亚洲一区二区三区香蕉| 在线a免费观看最新网站| 亚洲国产另类久久久精品黑人 | 人妖系列免费网站观看| 西西大胆无码视频免费| 亚洲成A人片在线观看无码不卡| 美女露100%胸无遮挡免费观看| 亚洲日韩精品A∨片无码| 91精品视频免费| 亚洲网红精品大秀在线观看| 久久久久久国产a免费观看不卡| 亚洲成人在线电影| 久久毛片免费看一区二区三区| 亚洲网站在线播放|