1.3

2.4.4 GridBagLayout(网格包布局)
GridBagLayout布局管理器的功能最强大,但也最复杂,与 GridLayout布局管理器不同的是,在 GridBagLayout布局管理器中,一个组件可以跨越一个或多个网格,并可以设置网格的大小互不相同,从而增加了布局的灵活性。当窗口的大小发生变化时, GridBagLayout布局管理器也可以准确地控制窗口各部分的拉伸。
由于在 GridBagLayout布局中,每个组件可以占用多个网格,此时,我们往容器中添加组件的时候,就需要具体的控制每个组件占用多少个网格,java提供的 GridBagContainers类,与特定的组件绑定,可以完成具体大小和跨越性位置。
import java.awt.*;

public class GridBagLayoutDemo {
public static void main(String[] args) {
//1.创建Frame对象
Frame frame = new Frame("这里是GridBagLayout测试");

//2.创建GridBagLayout对象
GridBagLayout gbl = new GridBagLayout();

//3.把Frame对象的布局管理器设置为GridBagLayout
frame.setLayout(gbl);

//4.创建GridBagConstraints对象
GridBagConstraints gbc = new GridBagConstraints();

//5.创建容量为10的Button数组
Button[] bs = new Button[10];

//6.遍历数组,初始化每一个Button
for (int i = 0; i < bs.length; i++) {
bs[i] = new Button("按钮"+(i+1));
}

//7.设置所有的GridBagConstraints对象的fill属性为GridBagConstraints.BOTH,当有空白区域时,组件自动扩大占满空白区域
gbc.fill=GridBagConstraints.BOTH;

//8.设置GridBagConstraints对象的weightx设置为1,表示横向扩展比例为1
gbc.weightx=1;

//9.往frame中添加数组中的前3个Button
addComponent(frame,bs[0],gbl,gbc);
addComponent(frame,bs[1],gbl,gbc);
addComponent(frame,bs[2],gbl,gbc);

//10.把GridBagConstraints的gridwidth设置为GridBagConstraints.REMAINDER,则表明当前组件是横向最后一个组件
gbc.gridwidth=GridBagConstraints.REMAINDER;

//11.把button数组中第四个按钮添加到frame中
addComponent(frame,bs[3],gbl,gbc);


//12.把GridBagConstraints的weighty设置为1,表示纵向扩展比例为1
gbc.weighty=1;

//13.把button数组中第5个按钮添加到frame中
addComponent(frame,bs[4],gbl,gbc);

//14.把GridBagConstaints的gridheight和gridwidth设置为2,表示纵向和横向会占用两个网格
gbc.gridheight=2;
gbc.gridwidth=2;

//15.把button数组中第6个按钮添加到frame中
addComponent(frame,bs[5],gbl,gbc);

//16.把GridBagConstaints的gridheight和gridwidth设置为1,表示纵向会占用1个网格
gbc.gridwidth=1;
gbc.gridheight=1;
//17.把button数组中第7个按钮添加到frame中
addComponent(frame,bs[6],gbl,gbc);

//18.把GridBagConstraints的gridwidth设置为GridBagConstraints.REMAINDER,则表明当前组件是横向最后一个组件
gbc.gridwidth=GridBagConstraints.REMAINDER;

//19.把button数组中第8个按钮添加到frame中
addComponent(frame,bs[7],gbl,gbc);

//20.把GridBagConstaints的gridwidth设置为1,表示纵向会占用1个网格
gbc.gridwidth=1;

//21.把button数组中第9、10个按钮添加到frame中
addComponent(frame,bs[8],gbl,gbc);
addComponent(frame,bs[9],gbl,gbc);

//22.设置frame为最佳大小
frame.pack();

//23.设置frame可见
frame.setVisible(true);
}

public static void addComponent(Container container,Component c,GridBagLayout gridBagLayout,GridBagConstraints gridBagConstraints){
gridBagLayout.setConstraints(c,gridBagConstraints);
container.add(c);
}
}


2.4.5 CardLayout(卡片布局)
CardLayout布局管理器以时间而非空间来管理它里面的组件,它将加入容器的所有组件看成一叠卡片(每个卡片其实就是一个组件),每次只有最上面的那个Component才可见。就好像一副扑克牌,它们叠在一起,每次只有最上面的一张扑克牌才可见。

方法名称 方法功能
CardLayout() 创建默认的CardLayout布局管理器
CardLayout(int hgap, int vgap) 通过指定卡片与容器左右边界的间距(hgap)、上下边界(vgap)的间距来创建CardLayout布局管理器
first(Container target) 显示target容器中的第一张卡片
last(Container target) 显示target容器中的最后一张卡片
previous(Container target) 显示target容器中的前一张卡片
next(Container target) 显示target容器中的后一张卡片
show(Container target,String name) 显示target容器中指定名字的卡片
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CardLayoutDemo {

public static void main(String[] args) {
Frame frame = new Frame("这里测试CardLayout");


//1.创建一个Panel,用来存储多张卡片
Panel p1 = new Panel();
//2.创建CardLayout对象,并且把该对象设置给之前创建的容器
CardLayout cardLayout = new CardLayout();
p1.setLayout(cardLayout);
//3.往panel中存储多个组件
String[] names = {"第一张","第二张","第三张","第四张","第五张"};

for (int i = 0; i < names.length; i++) {
p1.add(names[i],new Button(names[i]));
}

//4.把panel放到frame的中间区域
frame.add(p1);

//5.创建另外一个panel p2,用来存储多个按钮组件
Panel p2 = new Panel();

//6.创建5个按钮组件
Button b1 = new Button("上一张");
Button b2 = new Button("下一张");
Button b3 = new Button("第一张");
Button b4 = new Button("最后一张");
Button b5 = new Button("第三张");

//7.创建一个事件监听器,监听按钮的点击动作
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String actionCommand = e.getActionCommand();//这个字符串其实就是按钮上的文字
switch (actionCommand){
case "上一张":
cardLayout.previous(p1);
break;
case "下一张":
cardLayout.next(p1);
break;
case "第一张":
cardLayout.first(p1);
break;
case "最后一张":
cardLayout.last(p1);
break;
case "第三张":
cardLayout.show(p1,"第三张");
break;
}

}
};

//8.把当前这个时间监听器和多个按钮绑定到一起
b1.addActionListener(listener);
b2.addActionListener(listener);
b3.addActionListener(listener);
b4.addActionListener(listener);
b5.addActionListener(listener);
//9.把按钮添加到容器p2中
p2.add(b1);
p2.add(b2);
p2.add(b3);
p2.add(b4);
p2.add(b5);

//10.把p2放到frame的南边区域
frame.add(p2,BorderLayout.SOUTH);

frame.pack();
frame.setVisible(true);
}
}

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_64491740/article/details/123856851

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863159.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ELK集成.Net8部署在Docker中

ELK介绍 ELK,是Elastaicsearch、Logstash、Kibana三个软件的简称。 Elastaicsearch是一个开源的全文搜索引擎,基于Lucene的封装,它提供了REST API 的操作接口; Logstach是一个开源的数据收集引擎,具有实时的管道,它可以动态地将不同的数据源的数据统一起来。 Kibana是一个…

matlab的标定工具箱

https://blog.csdn.net/weixin_43159148/article/details/97918258 https://blog.csdn.net/qq_41372644/article/details/121089361 Camera 1 Intrinsics 相机1内参 Focal length (pixels): [ 534.3145 +/- 0.3389 534.3111 +/- 0.3287 ] Principal point (pixels):[…

【Access语法】SQL连接查询

在 Microsoft Access 中,联合查询(也称为 JOIN 查询)是用于从两个或多个相关表中检索数据的一种方法。通过使用联合查询,您可以将来自不同表的数据组合在一起,以便在一个结果集中进行查看和分析。 联合查询的类型 Access 支持几种不同类型的联合查询,包括: 内连接(Inne…

神经辐射场ReNF基础

定义 神经辐射场是一种面向三维隐式空间建模的深度学习模型,这种深度学习模型又称全连接神经网络(又称多层感知机)。NeRF 所要做的任务是 Novel View Synthesis,一般翻译为新视角合成任务,定义是:在已知视角下对场景进行一系列的捕获 (包括拍摄到的图像,以及每张图像对应…

opencv + vtk + contrib 编译

https://blog.csdn.net/qq_48034474/article/details/12041170

IntelliJ IDEA 2024.3.1.1 最新版安装教程-至2099年(适用JetBrains 全家桶)

下面演示下最新版本的永久激活方法,大家按教程就可以实现一键永久激活。该工具是全家桶,大家可以放心使用。获取地址:https://www.dmjf.top/15141.html

Webstorm v2024.3.1.1 最新版安装教程-至2099年(适用JetBrains 全家桶)

下面演示下最新版本的永久激活方法,大家按教程就可以实现一键永久激活。该工具是全家桶,大家可以放心使用。获取地址:https://www.dmjf.top/15075.html

JVM实战—8.如何分析jstat统计来定位GC

大纲 1.使用jstat了解线上系统的JVM运行状况 2.使用jmap和jhat了解线上系统的对象分布 3.如何分析JVM运行状况并合理优化 4.使用jstat分析模拟的BI系统JVM运行情况 5.使用jstat分析模拟的计算系统JVM运行情况 6.问题汇总1.使用jstat了解线上系统的JVM运行状况 (1)JVM的整体运行…

Xshell Plus v7.0.14+Xftp7 永久授权版

Xshell 是更常用的安全终端模拟器,人们可以使用它远程登录其他系统服务器,达到远程控制终端的目的。 NetSarang Xshell – 知名终端连接工具,非常强大的SSH远程终端客户端 ,非常好用的SSH终端管理器。Xshell功能超级强大,性能非常优秀,其特色功能支持多标签会话管理主机,…

【Java开发】基于AOP切面的数据脱敏

#数据安全 #AOP切面编程 #数据脱敏 #微服务架构 随着数据安全法和个人信息保护法的实施,我们都知道,保护数据是企业信息化建设中非常重要的事情。 数据的生命周期包括:采集、传输、存储、处理、交换、销毁6个阶段 DSMM定义了数据生命周期中每个阶段需要做的一些安全控制,比…

《计算机组成及汇编语言原理》阅读笔记:p177-p177

《计算机组成及汇编语言原理》学习第 13 天,p177-p177 总结,总计 1 页。 一、技术总结 1.real mode A programming model where the program has access to the entire capability of the machine, bypassing security and memory management. Useful primarily for operat…

Android Password Safe(密码保险箱)

password safe手机版是一款主打密码管理跟保存内容的软件,密码保险箱与管理器以加密方式存储和管理你输入的所有数据,因此你可以安全存储访问数据,你只需要记住主密码。 此密码管理器允许你管理和跟踪所有敏感数据,这些数据完全加密且安全存储。 用于保护数据保险库的加密基…