亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? java布局管理器深入討論.txt

?? 我搜集的部分JAVA技術(shù)文檔學(xué)習(xí)資料
?? TXT
字號(hào):
作者:五一
日期:2001-6-9 13:30:12
Java布局管理器深入討論
5/23/2001 16:59:54· 劉之佑·yesky

--------------------------------------------------------------------------------

  我們都知道,java的GUI界面定義是由awt類和swing類來完成的。它在布局管理上面采用了容器和布局管理分離的方案。也就是說,容器只管將其他小件放入其中,而不管這些小件是如何放置的。對(duì)于布局的管理交給專門的布局管理器類(LayoutManager)來完成。

  其實(shí),java在GUI方面應(yīng)該是并不成功的。Awt類和swing類的結(jié)構(gòu)非常復(fù)雜,加上充斥其間的子類繼承和接口實(shí)現(xiàn),使得要想掌握這兩個(gè)類非常困難。這也是很多的java程序員抱怨的事情,但GUI已經(jīng)成了程序發(fā)展的方向,所以這里我們也得勉為其難了。

  現(xiàn)在我們來看java中布局管理器的具體實(shí)現(xiàn)。我們前面說過,java中的容器類(Container),它們只管加入小件(Meta),也就是說,它只使用自己的add()方法向自己內(nèi)部加入小件。同時(shí)他記錄這些加入其內(nèi)部的小件的個(gè)數(shù),可以通過container.getComponentCount()方法類獲得小件的數(shù)目,通過container.getComponent(i)來獲得相應(yīng)小件的句柄。然后LayoutManager類就可以通過這些信息來實(shí)際布局其中的小件了。

  java已經(jīng)為我們提供了幾個(gè)常用的布局管理器類,例如:BorderLayout、FlowLayout、GridBagLayout等等。但在實(shí)際的布局上,我們還是會(huì)有其他的需要。我在不久前的一個(gè)問題中曾經(jīng)要一個(gè)垂直的流式布局,我稱之為VflowLayout,其實(shí)BoxLayout和GridBagLayout可以完成類似的工作,但前者是swing類的成員,我的客戶端是一個(gè)applet,不能使用,而后者必須在類生成的時(shí)候指定列數(shù),而失去了靈活性,所以我決定重寫一個(gè)自己的布局管理器來實(shí)現(xiàn)。經(jīng)過分析,所有的LayoutManager都要實(shí)現(xiàn)一個(gè)接口,就是LayoutManager Inerface或者是他的一個(gè)子接口LayoutManager2 Interface,后者用于復(fù)雜的布局管理,例如GridCardLayout。LayoutManager有五個(gè)方法需要實(shí)現(xiàn),分別是:

  1、public void addLayoutComponent(String name, Component comp);

  2、public void removeLayoutComponent(Component comp);

  3、public Dimension preferredLayoutSize(Container container);

  4、public Dimension minimumLayoutSize(Container container);

  5、public void layoutContainer(Container container);

  第一個(gè)方法其實(shí)就是你在使用container.add(String name,component comp);時(shí)調(diào)用的方法,例如BorderLayout為布局管理器時(shí)。但在FlowLayout中由于沒有其他的附加信息,所以不需要填充這個(gè)方法。相應(yīng)的第二個(gè)方法也就不需要填充了。真正核心的方法是第三個(gè)和第五個(gè)方法,前者是最終確定Container有多大的,而后者就是決定Container中各個(gè)小件的實(shí)際位置的了。也就是說,當(dāng)我們用container.setLayout(LayoutManager)后,再加入小件后,最后系統(tǒng)做的工作其實(shí)是LayoutManager. layoutContainer(container);和container.setSize(LayoutManager. PreferredLayoutSize(container));。

  下面是我的新類:VflowLayout。 
  package render_account;

  import java.awt.*;
  import java.io.*;

  public class VFlowLayout implements LayoutManager,Serializable{

   int hgap;
   int vgap;

   public VFlowLayout(){
    this(5,5);
   }

   public VFlowLayout(int i,int j){
    this.hgap=i;
    this.vgap=j;
   }

   public void addLayoutComponent(String name, Component comp){

   }

   public void removeLayoutComponent(Component comp){

    }

   public Dimension preferredLayoutSize(Container container){
    synchronized(container.getTreeLock()){
    Dimension dimension1=new Dimension(0,0);
    int i=container.getComponentCount();
    for(int j=0;j       Component component = container.getComponent(j);
      if(component.isVisible()){
        Dimension dimension2=component.getPreferredSize();
        dimension1.width=Math.max(dimension1.width,dimension2.width);
        if(j>0)
         dimension1.height+=vgap;
         dimension1.height+=dimension2.height;
        }
      }
      Insets insets=container.getInsets();
      dimension1.height+=insets.top+insets.bottom+vgap*2;
      dimension1.width+=insets.left+insets.right+hgap*2;
      Dimension dimension=dimension1;
      return dimension;
      file://return(new Dimension(50,200));
     }
    }

    public Dimension minimumLayoutSize(Container container){
     synchronized(container.getTreeLock()){
     Dimension dimension1=new Dimension(0,0);
     int i=container.getComponentCount();
     for(int j=0;j      Component component = container.getComponent(j);
     if(component.isVisible()){
      Dimension dimension2=component.getMinimumSize();
      dimension1.width=Math.max(dimension1.width,dimension2.width);
      if(j>0)
       dimension1.height+=vgap;
       dimension1.height+=dimension2.height;
      }
     }
     Insets insets=container.getInsets();
     dimension1.height+=insets.top+insets.bottom+vgap*2;
     dimension1.width+=insets.left+insets.right+hgap*2;
     Dimension dimension=dimension1;
     return dimension;
    }
   }

   public void layoutContainer(Container container){
    synchronized(container.getTreeLock()){
    Insets insets=container.getInsets();
    int vSpace=container.getSize().height-(insets.top+insets.bottom+vgap*2);
    int componentCount=container.getComponentCount();
    int left=insets.left+hgap;
    int totalHeight=0;
    int width=0;
    int componentStart=0;
    for(int i=0;i      Component component=container.getComponent(i);
     if(component.isVisible()){
      Dimension dimension=component.getPreferredSize();
      component.setSize(dimension.width,dimension.height);
      if(totalHeight==0 || totalHeight+dimension.height<=vSpace){
       if(totalHeight>0)
        totalHeight+=vgap;
        totalHeight+=dimension.height;
        width=Math.max(width,dimension.width);
       }else{
        moveComponents(container,insets.top+vgap,left,width,componentStart,i);
        totalHeight=0;
        left+=hgap+width;
        width=dimension.width;
        componentStart=i;
       }
      }
     }
     moveComponents(container,insets.top+vgap,left,width,componentStart,componentCount);
    }
   }

   private void moveComponents(Container container,int top,int left,int width,int          componentStart,int componentEnd){
     synchronized(container.getTreeLock()){
      for(int i=componentStart;i        Component component=container.getComponent(i);
       if(component.isVisible()){
        component.setLocation(left,top);
        top+=component.getPreferredSize().height+vgap;
       }
      }
     }
    }

    public void setHgap(int i){
      this.hgap=i;
    }

    public void setVgap(int i){
      this.vgap=i;
    }

    public int getHgap(){
     return(this.hgap);
    }

    public int getVgap(){
     return(this.vgap);
    }
   }

  大家可以試一下。

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品你懂的| 国产午夜精品福利| 极品少妇xxxx偷拍精品少妇| 久久久久国产成人精品亚洲午夜| 成人av电影在线播放| 美女脱光内衣内裤视频久久影院| 亚洲成av人**亚洲成av**| 亚洲欧洲日韩一区二区三区| 国产午夜精品在线观看| 91在线视频18| 国产成人在线电影| 麻豆91小视频| 日韩欧美一区二区不卡| 韩国av一区二区三区在线观看| 亚洲国产成人午夜在线一区| 欧美视频一区在线| 亚洲v精品v日韩v欧美v专区| 久久久久国产免费免费| 一本大道久久a久久综合婷婷| 五月天久久比比资源色| 国产精品久久久久久久久免费桃花 | 国产精品自在在线| 亚洲欧美乱综合| 欧美日韩亚洲综合一区二区三区 | 精品三级在线观看| 成人av电影免费观看| 成人免费电影视频| 美脚の诱脚舐め脚责91| 六月丁香综合在线视频| 久久精品国产99国产| 久久99精品久久久久| 另类欧美日韩国产在线| 麻豆精品一区二区综合av| 久久国产尿小便嘘嘘尿| 国精品**一区二区三区在线蜜桃| 韩国成人在线视频| 国产精品99久久久久久久vr| 高清日韩电视剧大全免费| av亚洲精华国产精华| 成人福利在线看| 91国偷自产一区二区三区观看| 精品国产网站在线观看| 精品精品欲导航| 久久免费看少妇高潮| 国产精品伦理在线| 亚洲午夜一区二区| 激情图片小说一区| 不卡高清视频专区| 欧美日韩你懂的| 日韩欧美自拍偷拍| 国产精品久久久久久久久免费桃花| 亚洲激情自拍视频| 日韩精品一级中文字幕精品视频免费观看| 免费成人在线网站| 972aa.com艺术欧美| 在线综合亚洲欧美在线视频| 久久亚洲二区三区| 亚洲美女在线国产| 黄色日韩三级电影| 91猫先生在线| 欧美zozozo| 久久久久久久久久久久久久久99 | 国产日韩精品一区| 亚洲乱码国产乱码精品精小说 | 日韩女优制服丝袜电影| 国产精品亲子伦对白| 午夜伦欧美伦电影理论片| 国产成人免费视频精品含羞草妖精| av在线一区二区三区| 欧美精品三级日韩久久| 欧美国产一区在线| 国产精品久久午夜夜伦鲁鲁| 日韩精品色哟哟| 97久久精品人人爽人人爽蜜臀| 日韩女优av电影| 亚洲综合一二区| 豆国产96在线|亚洲| 欧美日韩一区二区三区四区 | 久久精品国产亚洲一区二区三区| 成人午夜精品在线| 欧美一激情一区二区三区| 亚洲国产精品精华液网站| 99精品国产99久久久久久白柏| 久久精品日产第一区二区三区高清版| 视频一区国产视频| 在线免费不卡电影| 国产精品福利电影一区二区三区四区| 极品美女销魂一区二区三区免费| 欧美一区午夜精品| 香港成人在线视频| 欧美色图天堂网| 一区二区三区四区亚洲| 99热在这里有精品免费| 国产欧美一区二区三区网站 | 日韩视频国产视频| 日本不卡视频在线| 91精品国产91久久久久久一区二区 | 久久久久国产免费免费| 激情另类小说区图片区视频区| 91精品国产色综合久久不卡电影 | 美女脱光内衣内裤视频久久影院| 欧美人狂配大交3d怪物一区 | 欧美性大战久久久| 亚洲精品精品亚洲| 91黄色激情网站| 亚洲成人自拍偷拍| 欧美区视频在线观看| 五月婷婷综合网| 日韩一区二区三区电影| 蜜桃视频在线观看一区| 日韩精品中文字幕在线不卡尤物| 美女视频免费一区| 久久久久久久久久久电影| 国产麻豆精品久久一二三| 中文字幕国产一区二区| 成人精品一区二区三区中文字幕| 国产精品久久久久久福利一牛影视 | 色婷婷综合中文久久一本| 亚洲美女视频一区| 欧美日韩视频不卡| 奇米影视一区二区三区| 久久综合色婷婷| 成人午夜在线免费| 一级做a爱片久久| 欧美精品亚洲二区| 韩国视频一区二区| 国产精品美女久久久久久久久久久 | 91精品国产色综合久久不卡电影| 久久99精品国产麻豆婷婷| 国产日韩欧美不卡| 91丝袜呻吟高潮美腿白嫩在线观看| 一区二区在线看| 欧美一区午夜视频在线观看| 国产在线播放一区二区三区| 国产精品毛片久久久久久| 91行情网站电视在线观看高清版| 日韩av电影免费观看高清完整版| 欧美mv日韩mv| 99re热这里只有精品免费视频| 亚洲高清免费一级二级三级| 精品国产一区久久| av在线播放一区二区三区| 午夜欧美视频在线观看| 国产校园另类小说区| 日本高清不卡视频| 日av在线不卡| 亚洲欧洲国产日本综合| 欧美高清视频在线高清观看mv色露露十八| 国产一区二区三区四区在线观看| 亚洲天堂精品在线观看| 91精品在线一区二区| 国产69精品久久久久777| 亚洲自拍偷拍欧美| 精品国产第一区二区三区观看体验 | 黄色日韩网站视频| 一区二区三区四区蜜桃| 精品久久久久久久一区二区蜜臀| 色呦呦一区二区三区| 日本特黄久久久高潮| 亚洲欧美日韩精品久久久久| 日韩欧美激情一区| 日本韩国欧美三级| 精品午夜久久福利影院| 亚洲黄色av一区| 久久免费精品国产久精品久久久久| 日本黄色一区二区| 国产传媒欧美日韩成人| 日韩电影在线看| 成人免费在线播放视频| 欧美精品一区二区三区蜜臀| 欧洲一区在线观看| 日韩一区二区三区免费看| 成人综合婷婷国产精品久久蜜臀 | 国产精品美女久久福利网站| 日韩色视频在线观看| 欧美性受xxxx黑人xyx| 成人精品视频.| 久久99这里只有精品| 一级精品视频在线观看宜春院| 国产欧美综合色| 精品久久久久99| 91精品国产入口| 欧美日韩中字一区| 色偷偷一区二区三区| av电影在线观看不卡| 国产成人免费视| 国产一区二区免费在线| 美女爽到高潮91| 青青草国产成人99久久| 亚洲一二三四久久| 亚洲人成伊人成综合网小说| 国产精品素人视频| 久久久精品tv| 久久一区二区三区四区| 精品日韩在线观看| 日韩欧美亚洲一区二区| 欧美一区二区视频在线观看2022 | 欧美一级久久久久久久大片| 精品污污网站免费看| 日本高清免费不卡视频|