欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java布局管理器深入討論(轉(zhuǎn))-創(chuàng)新互聯(lián)

我們都知道,java的GUI界面定義是由awt類和swing類來完成的。它在布局管理上面采用了容器和布局管理分離的方案。也就是說,容器只管將其他小件放入其中,而不管這些小件是如何放置的。對于布局的管理交給專門的布局管理器類(LayoutManager)來完成。   其實,java在GUI方面應該是并不成功的。Awt類和swing類的結(jié)構(gòu)非常復雜,加上充斥其間的子類繼承和接口實現(xiàn),使得要想掌握這兩個類非常困難。這也是很多的java程序員抱怨的事情,但GUI已經(jīng)成了程序發(fā)展的方向,所以這里我們也得勉為其難了。   現(xiàn)在我們來看java中布局管理器的具體實現(xiàn)。我們前面說過,java中的容器類(Container),它們只管加入小件(Meta),也就是說,它只使用自己的add()方法向自己內(nèi)部加入小件。同時他記錄這些加入其內(nèi)部的小件的個數(shù),可以通過container.getComponentCount()方法類獲得小件的數(shù)目,通過container.getComponent(i)來獲得相應小件的句柄。然后LayoutManager類就可以通過這些信息來實際布局其中的小件了。   java已經(jīng)為我們提供了幾個常用的布局管理器類,例如:BorderLayout、FlowLayout、GridBagLayout等等。但在實際的布局上,我們還是會有其他的需要。我在不久前的一個問題中曾經(jīng)要一個垂直的流式布局,我稱之為VflowLayout,其實BoxLayout和GridBagLayout可以完成類似的工作,但前者是swing類的成員,我的客戶端是一個applet,不能使用,而后者必須在類生成的時候指定列數(shù),而失去了靈活性,所以我決定重寫一個自己的布局管理器來實現(xiàn)。經(jīng)過分析,所有的LayoutManager都要實現(xiàn)一個接口,就是LayoutManager Inerface或者是他的一個子接口LayoutManager2 Interface,后者用于復雜的布局管理,例如GridCardLayout。LayoutManager有五個方法需要實現(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);   第一個方法其實就是你在使用container.add(String name,component comp);時調(diào)用的方法,例如BorderLayout為布局管理器時。但在FlowLayout中由于沒有其他的附加信息,所以不需要填充這個方法。相應的第二個方法也就不需要填充了。真正核心的方法是第三個和第五個方法,前者是最終確定Container有多大的,而后者就是決定Container中各個小件的實際位置的了。也就是說,當我們用container.setLayout(LayoutManager)后,再加入小件后,最后系統(tǒng)做的工作其實是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.height0)         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);     }    }   大家可以試一下?!@more@]

本文名稱:Java布局管理器深入討論(轉(zhuǎn))-創(chuàng)新互聯(lián)
當前路徑:http://chinadenli.net/article40/epheo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)網(wǎng)站策劃、電子商務、虛擬主機、品牌網(wǎng)站設計、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司
色婷婷视频在线精品免费观看| 粉嫩内射av一区二区| 亚洲国产av在线视频| 亚洲中文字幕三区四区| 国产一区二区三区口爆在线| 欧美日韩国产免费看黄片| 日本一区二区三区黄色| 99久久免费中文字幕| 久久精品福利在线观看| 日韩特级黄色大片在线观看| 欧美日韩免费黄片观看| 女厕偷窥一区二区三区在线| 少妇福利视频一区二区| 日韩一区二区三区有码| 国产亚洲精品一二三区| 亚洲一区二区三在线播放| 亚洲精品成人午夜久久| 人妻内射在线二区一区| 一区二区日韩欧美精品| 我要看日本黄色小视频| 亚洲欧美日韩网友自拍| 亚洲精品中文字幕欧美| 中日韩美一级特黄大片| 超薄肉色丝袜脚一区二区| 国产av一区二区三区麻豆| 久久中文字幕中文字幕中文| 日本高清视频在线观看不卡| 小草少妇视频免费看视频| 福利视频一区二区在线| 欧美日韩国产另类一区二区| 国产三级不卡在线观看视频| 夫妻性生活一级黄色录像| 亚洲成人久久精品国产| 国产免费黄片一区二区| 亚洲少妇一区二区三区懂色| 中文人妻精品一区二区三区四区 | 国产色一区二区三区精品视频| 亚洲精品小视频在线观看| 亚洲熟妇av一区二区三区色堂| 国产又粗又长又大高潮视频| 国产一级二级三级观看|