当前位置:七道奇文章资讯编程技术Java编程
日期:2011-01-26 02:54:00  来源:本站整理

<b>深化Java策划管理器</b>[Java编程]

赞助商链接



  本文“<b>深化Java策划管理器</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

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

  以上是“<b>深化Java策划管理器</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .