无序网格布局管理器(GridBagLayou 收藏备用)

2024-06-02 10:58

本文主要是介绍无序网格布局管理器(GridBagLayou 收藏备用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

无序网格布局管理器

无序网格布局(GridBagLayou)是最灵活,同时也是最复杂的布局管理器,其布局机制多少有些复杂并且令人感到棘手。无序网格布局可以使组件扩充到多行多列,而无须所有组件都具有同样的大小。这可以通过设置一个与容器关联的单元的矩形网格并把每个组件放在一个或多个单元内这个办法来实现。这些单元形成了组件的显示区域。

GridBagLayout构造函数

无序网格布局使用两个类来排列组件:java.awt.GridBagLayout和java.awt.GridBagConstraints。而构造函数:

public GridBagLayout()

创建一个新的无序网格布局管理器,再用setLayout(GridBagLayout gridbag)方法将其设置成一个容器。

无序网格约束

无序网格布局管理器放置组件的模式依赖于下面这个方法施加在组件上的约束条件:

public void GridBagConstraints(Component comp, GridBagConstraints constraint);

这里的约束条件由GridBagConstraints类中的一组公共字段表示。这些字段可以被赋以特定的值,或者被赋以该类中已有的一组值。下一节中将描述GridBagConstraints类中的这些公共字段。

gridx和gridy

放置一个组件时需要两个坐标(x, y),例如,确定位于网格单元中某个按钮B1的位置时就需要有坐标。然后,就可以把该按钮的某一角,最好是左上角,放在这个特定的坐标位置(x, y)了。


 

字段gridx和gridy分别表示x坐标和y坐标。gridx表示组件显示区域左侧单元的个数,其中,最左边单元的gridx=0。gridy表示组件显示区域上方单元的个数,其中,最上面单元的gridy=0。上图的(x, y)是(2, 2)。

gridx和gridy也可以取GridBagConstraints类中所提供的常数RELATIVE。该常数规定,将新加入的组件按照特定的坐标方向放在上一个加入的组件的下一个位置。缺省地,gridx和gridy都取数值RELATIVE。

gridwidth和gridheight

当按照(x, y)坐标放置了组件子后,就可以确定组件的大小了。组件的大小可以用gridwidth和gridheight表示,他们分别表示沿行和列方向所扩充的单元数。在前面的图中,gridwidth和gridheight的值分别是3和2。

也可以用REMAINDER作为gridwidth和gridheight的取值,分别表示该组件扩充到最后一行或最后一列。gridwidth和gridheight可取的另一个常数是RELATIVE,它表示,按照特定的行列值将该组件放在上一个加入的组件的后一个位置。缺省地,gridwidth和gridheight的值均为1。

weightx和weighty

当改变容器大小时,字段weightx和weighty用于分别指定怎样分配多余的水平空间和垂直空间。为了取得所需的用户界面效果,这两个值起着关键的作用。它们可以设置为界于0.0和1.0之间任何双精度类型的值。如果组件的某个权数取了较大的值,那么该组件就会占据该方向上额外的空间。权数为零的组件不占据额外的空间。缺省地,weightx和weighty都设置为0。

fill

当组件的尺寸比其显示区域小时,字段fill就可以发挥作用了,它指定了一个组件在其显示区域内是如何分布的。可以将NONE、HORIZONTAL、VERTICAL以及BOTH中的任何一个值赋给字段fill。当把fll设为NONE时,它表示组件将不会填充显示区域。第二个常数HORIZONTAL使得组件的宽度能够达到仅沿水平方向填满显示区域。常数VERTICAL使得组件的高度能够达到仅沿垂直方向填满显示区域。最后一个常数BOTH使得组件沿水平方向和垂直方向完全填满显示区域。缺省地,fill的值设置为0。

anchor

字段anchor指定当组件小于显示区域时停靠的位置。停靠位置按照地理方位确定。该字段可能的取值有NORTH、NORTHEAST、EAST、SOUTHEAST、SOUTH、SOUTHWEST、WEST、NORTHWEST以及CENTER。缺省地,组件位于显示区域的中心。

insets

insets是AWT中提供的类Insets的类型字段。这个字段用于指定组件的外部填充区域的大小(external padding)——界于组件与其显示区域的边界之间的空间。通过利用Insets类的构造函数Insets(int top, int left, int bottom, int right)创建Insets对象,可以设置这个字段的值。参数top、left、bottom、right分别是四个方向上相对于显示区域边界留出的空间。缺省地,insets字段已经设置成对象Insets(0, 0, 0, 0),也就是没有外部填充区域。

ipadx和ipady

字段ipadx和ipady指定组件的内部填充区域(internal padding)——加在组件现有宽度和高度上的额外宽度和高度值。扩充的部分对组件的宽度和高度同时起作用。因此,额外的宽度和高度分别是ipadx和ipady的两倍。缺省情况下,组件没有内部填充区域。

GridBagLayout代码示例

下面代码清单演示了怎样用无序网格布局在容器内放置组件。程序使用了数值坐标,而不是常数RELATIVE和REMAINDER。

 
  1. import javax.swing.*;  
  2. import java.awt.*;  
  3.  
  4. public class TGridBagLayout extends JApplet {  
  5.     Container container = null;  
  6.       
  7.     public void init() {  
  8.         //1.Get a handle on the applet's content pane.  
  9.         container = this.getContentPane();  
  10.           
  11.         //2.Set the container to the grid bag layout and define a constraint object.  
  12.         GridBagLayout gridbag = new GridBagLayout();  
  13.         container.setLayout(gridbag);  
  14.         GridBagConstraints c = new GridBagConstraints();  
  15.           
  16.         //3.Common settings for constraint object instant variables.  
  17.         c.fill = GridBagConstraints.BOTH;  
  18.           
  19.         //4.Settings for button B1.  
  20.         c.insets = new Insets(5555);  
  21.         c.gridx = 0;  
  22.         c.gridy = 0;  
  23.         c.gridwidth = 2;  
  24.         c.gridheight = 2;  
  25.         c.weightx = 1.0;  
  26.         c.weighty = 1.0;  
  27.         makeButton("B1", gridbag, c);  
  28.           
  29.         //5.Settings for button B2.  
  30.         c.insets = new Insets(0000);  
  31.         c.gridx = 2;  
  32.         c.gridy = 0;  
  33.         c.gridwidth = 1;  
  34.         c.gridheight = 3;  
  35.         makeButton("B2", gridbag, c);  
  36.           
  37.         //6.Settings for button B3  
  38.         c.gridx = 0;  
  39.         c.gridy = 2;  
  40.         c.gridwidth = 1;  
  41.         c.gridheight = 1;  
  42.         c.weightx = 1;  
  43.         c.weighty = 0.5;  
  44.         makeButton("B3", gridbag, c);  
  45.           
  46.         //7.Settings for button B4.  
  47.         c.gridx = 1;  
  48.         c.gridy = 2;  
  49.         makeButton("B4", gridbag, c);  
  50.     }  
  51.       
  52.     //8.Define the function to create and add a button according to be constraints.  
  53.     public void makeButton(String name, GridBagLayout gridbag, GridBagConstraints c) {  
  54.         JButton button = new JButton(name);  
  55.         gridbag.setConstraints(button, c);  
  56.         container.add(button);  
  57.     }  
  58. }  

这篇关于无序网格布局管理器(GridBagLayou 收藏备用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023773

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

【Python知识宝库】上下文管理器与with语句:资源管理的优雅方式

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、什么是上下文管理器?二、上下文管理器的实现三、使用内置上下文管理器四、使用`contextlib`模块五、总结 前言 在Python编程中,资源管理是一个重要的主题,尤其是在处理文件、网络连接和数据库

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

收藏:解决 pip install 出现 error: subprocess-exited-with-error 错误的方法

在使用 pip 安装 Python 包时,有时候会遇到 error: subprocess-exited-with-error 错误。这种错误通常是由于 setuptools 版本问题引起的。本文将介绍如何解决这一问题 当你使用 pip install 安装某个 Python 包时,如果 setuptools 版本过高或过低,可能会导致安装过程出错,并出现类似以下错误信息:error: subpr

ConstraintLayout布局里的一个属性app:layout_constraintDimensionRatio

ConstraintLayout 这是一个约束布局,可以尽可能的减少布局的嵌套。有一个属性特别好用,可以用来动态限制宽或者高app:layout_constraintDimensionRatio 关于app:layout_constraintDimensionRatio参数 app:layout_constraintDimensionRatio=“h,1:1” 表示高度height是动态变化

html记账本改写:数据重新布局,更好用了,没有localStorage保存版本

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>htm记账本</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid bla

Qt-常用控件(3)-多元素控件、容器类控件和布局管理器

1. 多元素控件 Qt 中提供的多元素控件有: QListWidgetQListViewQTableWidgetQTableViewQTreeWidgetQTreeView xxWidget 和 xxView 之间的区别,以 QTableWidget 和 QTableView 为例. QTableView 是基于 MVC 设计的控件.QTableView 自身不持有数据,使用 QTab

【CSS】flex布局 - 左边超过打点, 右边完整展示

场景:宽度一定的情况下右边自适应,左边被挤压。 需要的效果如下: flex 的三个参数分别对应:flex-grow、flex-shrink、flex-basis。 flex-grow:定义项目的放大比例,默认为0。即如果存在剩余空间,也不放大。flex-shrink:定义项目的缩小比例,默认为1。即如果空间不足,该项目将缩小。flex-basis:定义在分配多余空间之前,项目占据的主轴空间。