老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Java中怎么實現一個布局管理器

Java中怎么實現一個布局管理器,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

創新互聯建站是一家專注于成都網站設計、網站建設、外貿網站建設與策劃設計,揭西網站建設哪家好?創新互聯建站做網站,專注于網站建設10余年,網設計領域的專業建站公司;建站業務涵蓋:揭西等地區。揭西做網站價格咨詢:028-86922220

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

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創新互聯行業資訊頻道,感謝您對創新互聯的支持。


新聞標題:Java中怎么實現一個布局管理器
地址分享:http://www.xueling.net.cn/article/gphiep.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国自产在线精品免费 | 精品在线第一页 | 欧美激情视频久久 | 色婷婷精品大在线视频 | 久久精品人人槡人妻人人玩 | 免费黄色av网址 | 欧美黄色片网站 | 亚洲日韩精品A∨片无码加勒比 | 欧美破苞系列二十三 | 成人黄色免费在线观看 | 在线不卡a资源高清 | 大地资源中文二页在线观看 | 一级视频在线播放 | 亚洲欧美一区二区三区久久 | 妖精色AV无码国产在线看 | 欧美18videosex性欧美tube1080 | 国产口爆吞精在线视频观看 | 日日摸日日碰夜夜爽无 | 青青草成人影视 | 亚洲色大成网站WWW永久在线观看 | 亚洲伊人久久精品影院一美女洗澡 | av片免费网站 | 男人的天堂视频精品乱在线 | 国产日韩精品综合网站 | 欧美激情一区二区久久久 | 青青青国产精品免费观看 | 无人在线视频观看免费 | 一个人免费观看视频WWW中文 | 9x9x9x人成免费观看y | 日射精情感性色视频 | 日日夜夜操av | 色吊丝2288sds中文字幕 | 韩国19禁视频一区二区 | 午夜亚洲国产理论片无码片 | 午夜久久久久久久 | 亚洲精品一区国产精品 | 亚洲人人爱 | 久久国产主播精品 | 无码免费毛片手机在线 | 手机看黄AV免费网址 | 天天色天天色天天色 |