亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩欧美在线观看一区二区三区| 亚洲人成网站影音先锋播放| 日韩 欧美一区二区三区| www.日韩在线| 亚洲日本在线视频观看| 成人app在线| 国产精品欧美极品| 成人免费av网站| 亚洲欧美在线视频| 91小视频免费看| 亚洲一级在线观看| 欧美久久一二区| 日本女人一区二区三区| 日韩精品一区二区三区视频在线观看| 午夜精品久久久久久久久| 欧美群妇大交群中文字幕| 日本不卡一区二区三区| 日韩精品中文字幕一区二区三区| 老司机一区二区| 欧美在线啊v一区| 亚洲国产日产av| 欧美自拍丝袜亚洲| 亚洲一区二区美女| 欧美一区二区三区性视频| 激情综合网av| 国产精品久久久久久久久果冻传媒 | 日本午夜精品视频在线观看| 欧美一级视频精品观看| va亚洲va日韩不卡在线观看| 亚洲影视在线观看| 欧美综合视频在线观看| 久久99久久精品欧美| 国产精品免费视频网站| 色综合av在线| 欧美aaa在线| 欧美不卡一区二区| 91在线观看污| 蜜桃视频在线观看一区二区| 国产拍欧美日韩视频二区| 成人国产电影网| 亚洲国产欧美在线| 国产日韩精品一区| 777午夜精品免费视频| 奇米综合一区二区三区精品视频| 国产亚洲成年网址在线观看| 在线免费观看视频一区| 久久99国产精品尤物| 亚洲日本一区二区| 欧美网站一区二区| 国产精品一区二区在线观看网站| 亚洲精品第1页| 精品国产成人系列| 在线视频综合导航| 国产二区国产一区在线观看| 亚洲一区二区三区四区五区黄 | 国产日韩欧美一区二区三区综合| 欧美系列亚洲系列| 久久精品国产亚洲一区二区三区| 国产精品你懂的在线欣赏| 6080yy午夜一二三区久久| 国产乱一区二区| 一区二区三区免费观看| 国产精品污污网站在线观看| 在线综合视频播放| 在线观看国产91| 不卡免费追剧大全电视剧网站| 免费高清在线一区| 亚洲成人在线网站| 亚洲丝袜另类动漫二区| 国产亚洲精品超碰| 91精品国产综合久久福利软件 | 亚洲精品国产a久久久久久| 久久综合av免费| 欧美日本韩国一区| 欧洲一区在线电影| 99精品一区二区三区| 成人一区二区视频| 紧缚捆绑精品一区二区| 蜜桃久久av一区| 午夜精品久久久久久久久久久| 亚洲免费av观看| 中文字幕一区二区三区在线播放| 久久久五月婷婷| 久久综合九色欧美综合狠狠| 精品国产乱码91久久久久久网站| 欧美日韩在线播放三区四区| 在线亚洲免费视频| 欧美亚洲自拍偷拍| 欧美日韩一卡二卡三卡| 欧美亚洲综合网| 色av成人天堂桃色av| 97精品视频在线观看自产线路二| 成人午夜伦理影院| 成人午夜视频免费看| 国产·精品毛片| 成人黄页在线观看| jlzzjlzz欧美大全| 一本久久a久久精品亚洲 | 97精品视频在线观看自产线路二| 成人高清免费在线播放| 成人av网在线| 91香蕉视频在线| 欧美在线播放高清精品| 欧美三级电影网| 欧美一区二区三区人| 日韩一区二区三区在线| 欧美精品一区二区三区蜜臀| xnxx国产精品| 中文字幕在线观看一区二区| 亚洲男帅同性gay1069| 亚洲午夜成aⅴ人片| 日韩国产一二三区| 国产资源精品在线观看| 国产成人高清在线| 91色porny在线视频| 欧美亚洲动漫制服丝袜| 欧美一卡2卡3卡4卡| 久久网站热最新地址| 亚洲三级在线免费| 爽好多水快深点欧美视频| 狠狠色丁香婷婷综合| 成人久久18免费网站麻豆| 日本黄色一区二区| 色狠狠综合天天综合综合| 色欧美片视频在线观看| 555www色欧美视频| 久久天天做天天爱综合色| 亚洲精品视频一区二区| 亚洲综合激情小说| 久久66热偷产精品| 色中色一区二区| 欧美成人一区二区三区在线观看 | 成人一级片网址| 欧美色图激情小说| 国产亚洲自拍一区| 婷婷综合五月天| 国产精品一级在线| 7777精品伊人久久久大香线蕉 | 风间由美一区二区av101 | 亚洲日本青草视频在线怡红院| 婷婷久久综合九色综合伊人色| 国产美女主播视频一区| 91国内精品野花午夜精品| 欧美精品一区二区三区在线播放| 亚洲男人的天堂一区二区| 毛片不卡一区二区| 色综合天天性综合| 2020国产精品自拍| 亚洲高清视频在线| 成人av在线资源网| 日韩亚洲欧美在线| 一区二区成人在线视频| 国产99精品视频| 日韩视频永久免费| 一区二区三区欧美在线观看| 精品在线一区二区三区| 欧美日韩成人在线| 中文字幕一区二区三区乱码在线| 久久精品二区亚洲w码| 欧美性三三影院| 亚洲精品在线电影| 爽爽淫人综合网网站| 日本久久电影网| 国产欧美日韩一区二区三区在线观看| 日韩在线播放一区二区| k8久久久一区二区三区| 国产亚洲一二三区| 国产乱码精品一区二区三区av | 日韩国产欧美在线视频| 欧美视频中文字幕| 亚洲男人的天堂在线观看| 成人少妇影院yyyy| 国产欧美在线观看一区| 捆绑调教一区二区三区| 欧美一区二区私人影院日本| 亚洲综合在线视频| 91色视频在线| 亚洲欧美欧美一区二区三区| 成人短视频下载| 国产夜色精品一区二区av| 美腿丝袜亚洲三区| 国产精品三级av| 亚洲一区二三区| 7777精品伊人久久久大香线蕉| 亚洲一区视频在线| 日韩一区二区在线看| 国产一区二区女| 中文字幕视频一区二区三区久| 91国产丝袜在线播放| 日本成人在线视频网站| 久久久久久久久久美女| 91网站在线观看视频| 午夜电影久久久| 国产免费久久精品| 色999日韩国产欧美一区二区| 亚洲福利视频导航| 精品国产91亚洲一区二区三区婷婷| 国产a区久久久| 视频一区免费在线观看| 久久精品夜夜夜夜久久|