展开全部

用GridBagLayout吧,最精确的布局方法了。下面是我以前收藏的一篇文章你可以参考下,看上去很复杂,其实用32313133353236313431303231363533e78988e69d8331333262356162起来还是挺好用的。

地址:http://tmsoft.lsxy.com/index.php?load=read&id=31

GridBagLayout

【常用构造函数】

public GridBagLayout()

【特点】:

GridBagLayout是所有AWT布局管理器当中最复杂的,同时他的功能也是最强大的.这种现象源于它所提供的众多的可配置选项,你几乎可以完全地 控制容器的布局方式.尽管复杂性很明显,只要理解了基本思想,就很容易使用GridBagLayout了.

GridBagLayout从它的名字中你也可以猜到,它同GridLayout一样,在容器中以网格形式来管理组件.但GridBagLayout功能要来得强大得多.

1、GridBagLayout管理的所有行和列都可以是大小不同的.

2、GridLayout把每个组件限制到一个单元格,而GridLayout并不这样:组件在容器中可以占据任意大小的矩形区域,

GridBagLayout通常由一个专用类来对他布局行为进行约束,该类叫GridBagConstraints.其中的所有成员都是public的, 因此要学好如何使用GridBagLayout首先要了解有那些约束变量,以及如何设置这些约束变量.

以下是GridBagConstraints的公有成员变量

public int anchor

public int fill

public gridheight

Public gridweight

public girdx

public gridy

public Insets insets

public int ipadx

public int ipady

public double weightx

public double weighty

看起来有很多约束需要进行设置,但事实上许多约束只需设置一次,并对多个组件重用,每次添加组件时只有少数的项需要修改.

下面是一个具有简单约束的GridBagLayout示例

public class GridBagLayoutExample2 extends JPanel {

public GridBagLayoutExample2() {

this.setLayout(new GridBagLayout());

this.setOpaque(true);

GridBagConstraints c = new GridBagConstraints();

JButton b = new JButton ("One");

c.gridx = 0 ;

c.gridy = 0;

c.gridwidth = 2;

c.gridheight = 1;

this.add(b,c);//button 1 added

c.gridy++;

b= new JButton("Two");

this.add(b,c);

c.gridx = 2;

c.gridy = 0;

c.gridwidth = 2;

c.gridheight = 2;

b = new JButton("Three");

this.add(b,c);

c.gridx = 0 ;

c.gridy = 2;

c.gridwidth = 4;

c.gridheight =1 ;

this.add(new JTextField(35),c);

}

public static void main(String[] args) {

JFrame f = new JFrame("GridBagLayout 2");

JPanel p = new GridBagLayoutExample2();

f.getContentPane().add(p);

f.pack();

f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

f.setVisible(true);

}

}

上述示例首先生成了约束对象c , 并设置了它的属性gridx , gridy , gridwidth, girdheight四个属性,下面简要介绍这四个属性的作用

gridx, gridy 这个属性是用来描述组件在布局时应处于那个网格位置,即描述网格开始的位置

gridwidth,gridheigh这两个属性用来描述组件在布局中的所占的网格的个数,gridwidth描述了该组件在横向上所占网格的个数,gridheight描述了该组件在纵向上所占网格的个数.

你也可以通过GridBagConstraints的RELETIVE,和REMAINDER来进行指定,它的用法是:

当把gridx值设置为GridBagConstriants.RELETIVE时,在一个组件添加时,将被放置在前一个组件的右侧.同理,对gridy 值设置为GridBagConstraints.RELETIVE时,在添加组件时,将被放置在前一个组件的下方,(这是一种根据前一个组件而决定当前组 件的相对放置方式)

对gridweight和gridheight也可以应用GridBagConstraints的REMAINDER方式,创建的组件会从创建的起点位置 开始一直延伸到容器所能允许的限度为止.该功能使得你可以创建跨越某些行或列的组件,从而改变相应方向上组件的数目,即使其后在布局的其他地方添加额外的 组件也是如此.

你可以注意到图表1的buttonOne和buttonTwo上下紧靠,你可以通过设置GridBagConstraints成员Insets来调整它周围的空间大小,

new Insets(int top , int left , int bottom, int right)

c.insets = new Insets(4,4,4,4);

接下去要解决的一个问题是容器缩放时的行为.对于文本栏这个问题是最明显的,无论容器如何变形,它都保持同样的大小.文本区域应该总是跨越在容器的底部,但你肯定不希望在纵向缩放时,文本栏也纵向增长.

weightx和weighty成员就是用来控制在容器变形时,单元格本身如何缩放.这两个属性都是浮点数值,描述了每个单元格在拉伸时横向或纵向等到的分配比例.如对上例中的weightx设置

button one 0.4

button two 0.4

button three 0.6

text area 1.0

则在拉伸过程中,假设拉伸了10个象素,则button one横向得到10*0.4 = 4个象素

button three得到了剩余的6个象素.在拉伸过程中按钮one和按钮three以0.4:0.6的方式放大

为了放置纵向拉伸时,文本框的纵向扩展,你可以把weighty设置为0

你可能已经注意到,尽管我们已经将文本框的weight设置为1.0,但它并没有占据额外的可用的横向空间,即并没有在横向拉伸时始终占据整个底部行.

之 所以出现这个问题,是因为单元格和组件之间的区别还没有弄清楚,weightx和weighty值控制的是容器增长时单元格扩展的程度,但它们对各个单元 格中的组件并没有直接的效应.实际上,当窗口扩展时容器的所有单元格都增长了,包括文本框所在的一横行单元格.但文本栏根本没有增长.这是因为在所分配的 单元格内部,组件的增长是由GridBagConstraints对象的fill成员控制的,它可取下列值

GridBagConstraints.NONE 不增长

GridBagConstraints.HORIZONTAL 只横向增长

GridBagConstraints.VERTICAL 只纵向增长

GridBagConstraints.BOTH 双向增长

当你创建一个GridBagConstraints对象时,其fill值设置为NONE,因此在单元格增长时,单元格内部组件不会增长.

ipadx和ipady两个属性:

在GridBagLayout 对容器进行布局时,它把每个组件的最小尺寸作为如何分配空间的一个约束条件来考虑;如果一个按钮的最小尺寸是30象素宽,20象素高,而相关联的约束对象 中,ipadx为4,ipady为2,那么按钮的最小尺寸将会成为横向38象素,纵向24象素.

anchor属性:

当组件在横向或纵向上小于所分配到的单元格面积时,该字段会起作用.在这些情况下,anchor将决定组件如何在可用的空间中对齐.默认情况下,组件固定在单元格的中心,周围均匀分布多余空间.你也可以指定其他对齐方式:

GridBagConstraints.NORTH

GridBagConstraints.SOUTH

GridBagConstraints.NORTHWEST

GridBagConstraints.SOUTHWEST

GridBagConstraints.SOUTHEAST

GridBagConstraints.NORTHEAST

GridBagConstraints.EAST

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java窗体分为左右两个面板_Java中怎么把一个窗体水平分为三部分呀?相关推荐

  1. java double 小数点后两位小数_Java中double类型的数据精确到小数点后两位

    Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585; BigDecimal b = newBigDecimal(f);do ...

  2. java 判断字符串包含几个字符_java中如何判断一个字符串包含几个指定字符

    可以用String类里的indexOf(String s,int i)方法,这个方法s是字符串div,i是从i下标开始查找该字符串在调用字符串中的位置,返回值是int类型. 相关学习视频推荐:java ...

  3. Java所有函数都是动态的_Java中的函数动态调用

    //------------------------------------- //类ArgumentHolder //用于调用参数的封装,实现变长参数及 //不同类型参数的统一形式地传递 //成员变 ...

  4. Winforn中怎样在窗体中打开另一个窗体

    场景 在Winform的窗体A中打开另一个窗体B. 实现 //打开新的窗体 CurveCompare cc = new CurveCompare(); cc.Show(); 效果 以上代码的实现参照: ...

  5. 在一个窗体中调用另一个窗体的控件或方法(C#)

    在一个窗体中调用另一个窗体的控件或方法 解决方案:从构造函数中传递参数(Form). 1.将Form1中的控件改成public属性 具体实现过程请参看一下代码(在form1的textbox1中输入然后 ...

  6. excel怎么一个格子斜分_『在Excel中,把一个格子用线分成三个怎么弄啊』一个单元格怎么斜分两个...

    在Excel中,把一个格子用线分成三个怎么弄啊 1.以excel2010版本为例,如选中该单元格后击页面上方的"": 2.在插入栏下,找到"形状"选项,并点击, ...

  7. java上下左中右的布局面板_JAVA GUI重要知识点学习心得

    本人最近学习javaGUI发现重要知识点和思想用的频率很高,把它们整理下来一起分享 1:JFrame窗口和JDialog窗口 一班JFrame用作主窗口,JDialog用作弹出窗口(即对话框),但JF ...

  8. java 选项卡面板_Java中的高级组件面板——JTabbedPane(选项卡面板)

    在Java的GUI设计中,若是要想实如今一个窗体中多个界面而且能在这些界面内能够随意切换,那选项卡面板绝对是最佳的选择,下面将具体介绍JTabbedPane的使用方法java 使用方法介绍 1. 首先 ...

  9. java添加窗体中_java中利用JFrame创建窗体 【转】

    Java代码 publicclassTest(){ publicstaticvoidmain(String[] args){ JFrame frame = newJFrame(); JPanel pa ...

最新文章

  1. 30 个 php 操作 redis 常用方法代码例子
  2. linux降内核版本_ubuntu18.04 降内核版本的问题
  3. php.ini 中文版第二部分(关于这个配制文件)
  4. 自动化Build的方法如下所示
  5. Camel In Action 读书笔记 (1)
  6. MySQL如何向表中增加、修改字段
  7. 程序员绩效总结_闲聊程序员的绩效考核
  8. always on sql 收缩日志_SQL Server AlwaysOn日志收缩
  9. php5.6 event,php安装event扩展
  10. springMVC-配置Bean
  11. 中介者模式分析、结构图及基本代码
  12. 【CF566#D】 Restructuring Company (并查集---合并区间操作)
  13. java线程卡住排查_基于 Java 线程栈 排查问题
  14. python找不到指定的模块是什么意思_Python找不到指定的模块
  15. 如何解决常见的 Active Directory 复制错误
  16. MySql学习笔记——存储函数
  17. 查看服务器的性能和使用状态(top,free,df)
  18. 中国成为「研究生大国」,99%研究生背后的焦虑:就业更难了!
  19. Stata:面板数据模型的完整步骤(NPL与企业绿色创新)
  20. Eoapi — 一个可拓展的开源 API 工具

热门文章

  1. python图片转手绘_【python小工具】不给你的女朋友来张素描吗?使用python将图片转素描...
  2. WiFi接入微信公众号认证上网,对微信公众号有什么要求?
  3. 无人值守称重系统是怎么管理物资车辆
  4. linux如何运行sshpass,sshpass访问Linux服务器(sshpass)
  5. vivo如何使用科学计算机,vivo玩机技巧:多屏互动让工作事半功倍
  6. logging日志的使用
  7. php 图片模糊处理,PHP实例:php使用高斯算法实现图片的模糊处理功能示例
  8. Win10能玩哪些xbox游戏?
  9. 计算机产品设计需要学什么,工业设计主要学习什么内容
  10. 【企业】把握蘑菇管理原理,合理培养人才