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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

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

?? 這是一本很好的Java開發書籍
?? TXT
字號:
作者:五一
日期:2001-6-9 13:30:12
Java布局管理器深入討論
5/23/2001 16:59:54· 劉之佑·yesky

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

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

  其實,java在GUI方面應該是并不成功的。Awt類和swing類的結構非常復雜,加上充斥其間的子類繼承和接口實現,使得要想掌握這兩個類非常困難。這也是很多的java程序員抱怨的事情,但GUI已經成了程序發展的方向,所以這里我們也得勉為其難了。

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

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

  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);

  第一個方法其實就是你在使用container.add(String name,component comp);時調用的方法,例如BorderLayout為布局管理器時。但在FlowLayout中由于沒有其他的附加信息,所以不需要填充這個方法。相應的第二個方法也就不需要填充了。真正核心的方法是第三個和第五個方法,前者是最終確定Container有多大的,而后者就是決定Container中各個小件的實際位置的了。也就是說,當我們用container.setLayout(LayoutManager)后,再加入小件后,最后系統做的工作其實是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);
    }
   }

  大家可以試一下。

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91无套直看片红桃| 欧美mv日韩mv| 日韩精品午夜视频| 中文字幕一区二区三区蜜月| 成人激情动漫在线观看| 天天综合色天天| 国产日本欧洲亚洲| 欧美精品黑人性xxxx| www.成人网.com| 久久精品国产99久久6| 国产精品素人视频| 精品国产乱码久久久久久1区2区 | 91最新地址在线播放| 蓝色福利精品导航| 激情都市一区二区| 蜜臀久久99精品久久久久宅男| 中文字幕中文字幕在线一区 | 国产主播一区二区三区| 天堂久久久久va久久久久| 亚洲三级在线看| 中文字幕视频一区| 亚洲丝袜自拍清纯另类| 欧美精品一区二区在线观看| 91精品久久久久久久久99蜜臂| 欧美三级在线看| 欧美色涩在线第一页| 欧美日韩中文字幕一区| 欧美日韩亚洲综合一区二区三区| 成+人+亚洲+综合天堂| 色综合久久66| 91福利精品第一导航| 欧美日韩黄色影视| 在线电影欧美成精品| 8x8x8国产精品| 久久蜜桃av一区二区天堂| 国产亚洲欧美一级| 亚洲另类在线制服丝袜| 调教+趴+乳夹+国产+精品| 视频一区二区欧美| 国产大陆亚洲精品国产| 色偷偷一区二区三区| 日韩一区和二区| 国产精品毛片久久久久久| 一区二区三区自拍| 激情文学综合插| 色狠狠色狠狠综合| 精品动漫一区二区三区在线观看| 精品国产亚洲一区二区三区在线观看| 久久亚洲一区二区三区明星换脸 | 亚洲欧洲一区二区在线播放| 日日骚欧美日韩| 一本色道a无线码一区v| 精品久久久久99| 一区二区三区日韩精品视频| 久久国产精品免费| 欧美日韩在线综合| 亚洲免费观看视频| www.在线欧美| 国产精品热久久久久夜色精品三区| 久久黄色级2电影| 日韩三级电影网址| 日韩高清一区在线| 欧美高清视频不卡网| 日韩av一区二| 91精品国产综合久久蜜臀| 自拍偷拍欧美精品| 丁香六月久久综合狠狠色| 久久久久久久久伊人| 国产精一品亚洲二区在线视频| 在线电影一区二区三区| 免费观看成人av| 久久新电视剧免费观看| 国产高清不卡一区| 国产精品婷婷午夜在线观看| 成人黄页在线观看| 亚洲精品国产a久久久久久| 91黄色小视频| 国产自产视频一区二区三区| 国产免费久久精品| 欧美亚州韩日在线看免费版国语版| 亚洲国产精品人人做人人爽| 欧美曰成人黄网| 久久99久久99精品免视看婷婷 | 懂色中文一区二区在线播放| 国产精品激情偷乱一区二区∴| 91一区二区在线观看| 日韩成人精品在线| 国产精品久久午夜夜伦鲁鲁| 欧美视频你懂的| 国产九色sp调教91| 香蕉成人伊视频在线观看| 中文字幕乱码久久午夜不卡| 这里只有精品99re| 97se亚洲国产综合自在线| 精品午夜久久福利影院| 亚洲一区中文日韩| 久久久久久久久97黄色工厂| 欧美中文字幕一区二区三区 | 青娱乐精品在线视频| 亚洲精品日日夜夜| 中文字幕成人av| 久久亚洲捆绑美女| 日韩欧美国产午夜精品| 欧美精品精品一区| 91麻豆精品国产91久久久更新时间| 日韩午夜小视频| 日韩一区二区三免费高清| 欧美福利视频导航| 欧美日韩精品一区二区| 欧美日韩你懂的| 欧美一区二区视频免费观看| 91精品久久久久久久99蜜桃| 欧美日韩国产影片| 欧美一三区三区四区免费在线看 | 日韩一区二区精品葵司在线 | 欧美剧在线免费观看网站 | 欧美喷水一区二区| 日韩一级高清毛片| 久久亚洲二区三区| 亚洲青青青在线视频| 亚洲丰满少妇videoshd| 国产中文字幕精品| 色综合天天做天天爱| 91精品在线观看入口| 日本一区二区电影| 亚洲高清不卡在线观看| 另类综合日韩欧美亚洲| 99v久久综合狠狠综合久久| 欧美亚洲一区二区在线观看| 日韩欧美国产精品| 亚洲精品ww久久久久久p站| 蜜臀a∨国产成人精品| 99re视频精品| 国产欧美一区视频| 日韩av在线免费观看不卡| 成人视屏免费看| 2017欧美狠狠色| 狠狠色丁香婷综合久久| 91精品综合久久久久久| 亚洲一区二区成人在线观看| av一区二区久久| 欧美激情中文字幕一区二区| 毛片av中文字幕一区二区| 欧美精品色一区二区三区| 亚洲激情第一区| www.亚洲精品| 日本一区二区免费在线观看视频| 美女久久久精品| 91精品国产综合久久精品| 日韩福利视频导航| 欧美久久免费观看| 久久精品国产99| 2017欧美狠狠色| 成人h精品动漫一区二区三区| 久久久久久亚洲综合影院红桃| 老司机精品视频导航| 日韩亚洲电影在线| 国产成人免费在线| 国产欧美精品一区aⅴ影院| 欧美调教femdomvk| 欧美a级理论片| 国产精品麻豆久久久| 欧美中文字幕一二三区视频| 亚洲大片精品永久免费| 久久精品免费在线观看| 成人av在线一区二区| 亚洲电影一区二区| 精品欧美黑人一区二区三区| 国产精品亚洲第一区在线暖暖韩国 | 日韩三级.com| 97国产精品videossex| 日韩高清电影一区| 国产精品久久久久久久久晋中| 欧美日韩综合在线免费观看| 国产一区二区三区在线观看免费视频 | 国产99精品在线观看| 亚洲一线二线三线视频| 久久精品在这里| 日韩色视频在线观看| 日本韩国精品在线| 懂色av一区二区夜夜嗨| 美国一区二区三区在线播放| 亚洲精品菠萝久久久久久久| 欧美经典三级视频一区二区三区| 欧美性色黄大片| 色婷婷综合视频在线观看| 成人高清视频免费观看| 韩国在线一区二区| 久久se这里有精品| 美国毛片一区二区三区| 蜜桃av噜噜一区二区三区小说| 亚洲图片欧美视频| 亚洲国产精品天堂| 亚洲影院久久精品| 亚洲第四色夜色| 奇米色一区二区三区四区| 免费国产亚洲视频| 国产成人鲁色资源国产91色综| 国产成人在线影院| 99久久er热在这里只有精品15 |