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

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

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

    沙漠中的魚

    欲上天堂,先下地獄
    posts - 0, comments - 56, trackbacks - 0, articles - 119
      BlogJava :: 首頁 ::  :: 聯系 :: 聚合  :: 管理

    在JavaMDI窗口中加入滾動條

    Posted on 2008-09-07 01:14 沙漠中的魚 閱讀(309) 評論(0)  編輯  收藏 所屬分類: Java

    Java設計MDI窗口,要用到JDesktopPane類和JInternalFrame類,其應用可以看jdk自帶的metaworks的例子。但用它實現的MDI窗口在子窗口移出父窗口時,沒有滾動條,為此必借助于JScrollPane才行,如下:

            JDesktopPane desktop = new JDesktopPane ();
    .
            JScrollPane scrollpane = new JScrollPane(desktop,
                    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                    JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
            getContentPane().add(scrollpane);

    但是一運行,但內部窗口移出到邊界外邊時,我們預想中的滾動條并沒有出現,怎么辦?原來,JDesktopPane 加到JScrollPane后其大小就只是JScrollPane的viewport的大小,所以滾動條并沒有出現。所以我們要想辦法讓JDesktopPane 的Viewport的大小跟隨內部窗口的位置而改變大小,繼承一個JDesktopPane 吧:

    /**
     * @author Turbo Chen
     * @version 1.01
     */
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;

    public class JDesktop extends JDesktopPane{
        public void paint(Graphics g){
            super.paint(g);
            Dimension d = preferredSizeOfAllFrames();
            this.setPreferredSize(d);
            this.revalidate();
        }

      /**
       * @return 返回最佳desktop尺寸..
       */
        public Dimension preferredSizeOfAllFrames(){
            JInternalFrame [] array = getAllFrames();
            int maxX = 0;
            int maxY = 0;
            for (int i = 0; i < array.length; i++){
                if ( array[ i ].isVisible() ){
                    int cx;
                    cx = array[i].getX();
                    int x = cx + array[i].getWidth();
                    if (x > maxX) maxX = x;
                    int cy;
                    cy = array[i].getY();
                    int y = cy + array[i].getHeight();
                    if (y > maxY) maxY = y;
                }
            }
            return new Dimension(maxX, maxY);
        }
    }
    關鍵是preferredSizeOfAllFrames()方法,子窗口移動時造成JDesktop的刷新,它調用preferredSizeOfAllFrames()方法重新計算最佳JDesktop的大小,并通過revalidate()方法來通知它的上層容器即JScrollPane,JScrollPane會根據JDesktop的大小來調整自身Viewport的大小,當Viewport的大小超出可視范圍,JScrollPane就出現滾動條了.

    在你的程序中,只要用這個新的JDesktop類,就可以在MDI窗口中實現滾動條了

     

    主站蜘蛛池模板: 日韩在线免费视频| 8x8x华人永久免费视频| 亚洲伊人久久大香线蕉| 国产97视频人人做人人爱免费| 国产青草视频免费观看97 | 国产一区二区三区免费看| 亚洲熟女乱综合一区二区| 久久久久久亚洲精品成人| 亚洲人成人伊人成综合网无码| 美女被cao免费看在线看网站| 亚洲男人的天堂在线| 黄色a三级免费看| 日本中文一区二区三区亚洲| 国产精品高清视亚洲精品| eeuss在线兵区免费观看| 亚洲人成人一区二区三区| 国产日韩AV免费无码一区二区| 成年人网站在线免费观看| 亚洲色成人四虎在线观看| 午夜精品射精入后重之免费观看| 久久亚洲精品中文字幕无码| 无码 免费 国产在线观看91| 久久久www成人免费毛片| 亚洲AV午夜成人片| a级毛片免费高清毛片视频| 国产一级一片免费播放| www免费黄色网| 亚洲精选在线观看| 成人免费无毒在线观看网站| 黄页网址在线免费观看| 亚洲午夜国产精品无码老牛影视| 青青草无码免费一二三区| 久久久久亚洲国产| 亚洲精品人成无码中文毛片 | 免费人成视频在线播放| 成人毛片18女人毛片免费96| 日日狠狠久久偷偷色综合免费| 好看的亚洲黄色经典| 亚洲人成网站免费播放| 亚洲一区二区免费视频| 四虎在线视频免费观看视频|