GridBagLayout GridBagConstraints 笔记231130

news2024/11/25 4:37:59

实例化使用模板

		GridBagLayout gbl = new GridBagLayout();
//		gbl.columnWidths = new int[]{200,200,200}; // 用数组设置列
//		gbl.rowHeights   = new int[]{100,100,100,100,100}; // 用数组设置行
		
		GridBagConstraints gbc = new GridBagConstraints();
		/**
		 * gridBagConstraints.fill
		 * 当子组件比所在网格小时:
		 * 设置 fill =
		 * GridBagConstraints.NONE; 不拉伸, 是默认值
		 * GridBagConstraints.HORIZONTAL;  水平填满所在网格
		 * GridBagConstraints.VERTICAL;    垂直填满所在网格
		 * GridBagConstraints.BOTH;        拉伸到所在网格大小,填满所在网格, 
		 */
		gbc.fill = GridBagConstraints.NONE;
//		gbc.fill = GridBagConstraints.BOTH        ;
		
		
		/**
		 * gridBagConstraints.anchor , `anchor`中文意思是: 锚(n), 抛锚(v)

		 * 当子组件比所在网格小时:
		 * 设置 anchor =
		 * GridBagConstraints.CENTER;   位于水平和垂直的正中央,(默认值)
		 * GridBagConstraints.EAST;   东
		 * GridBagConstraints.SOUTH;  南
		 * GridBagConstraints.WEST;   西
		 * GridBagConstraints.NORTH;  北
		 * GridBagConstraints.NORTHEAST;(东北,右上)
		 * GridBagConstraints.SOUTHEAST;(东南,右下)
		 * GridBagConstraints.SOUTHWEST;(西南,左上)
		 * GridBagConstraints.NORTHWEST;(西北,左上)
		 * 还有很多选项
		 * 此属性接受三种类型的值:相对于方向(orientation relative)、相对于基线(baseline relative)和绝对位置(absolute)。

绝对位置值不依赖于其他因素,包括:CENTER(中心)、NORTH(北)、NORTHEAST(东北)、EAST(东)、SOUTHEAST(东南)、SOUTH(南)、SOUTHWEST(西南)、WEST(西)和NORTHWEST(西北)。
相对于方向的值依赖于容器的组件方向属性,包括:PAGE_START(页面开始)、PAGE_END(页面结束)、LINE_START(行开始)、LINE_END(行结束)、FIRST_LINE_START(第一行开始)、FIRST_LINE_END(第一行结束)、LAST_LINE_START(最后一行开始)和LAST_LINE_END(最后一行结束)。
相对于基线的值依赖于基线位置,包括:BASELINE(基线)、BASELINE_LEADING(基线前导)、BASELINE_TRAILING(基线后尾)、ABOVE_BASELINE(基线之上)、ABOVE_BASELINE_LEADING(基线之上前导)、ABOVE_BASELINE_TRAILING(基线之上后尾)、BELOW_BASELINE(基线之下)、BELOW_BASELINE_LEADING(基线之下前导)和BELOW_BASELINE_TRAILING(基线之下后尾)。
默认值是CENTER,表示组件居中放置。
		 */
		gbc.anchor = GridBagConstraints.CENTER;
//		gbc.anchor = GridBagConstraints.NORTH;
		
		
		gbc.gridx = -1;     gbc.gridy = GridBagConstraints.RELATIVE;  //网格的横纵坐标,从0开始, -1是RELATIVE相对自动
		gbc.gridwidth = 1;  gbc.gridheight = 1;  //横向或纵向站几个网格,如同html的td的colspan和rowspan
		gbc.ipadx = 0;      gbc.ipady = 0;    //增加子组件宽高, gbc.weightx = 0; gbc.weighty = 0; 才有效
		gbc.weightx = 0;    gbc.weighty = 0;  //值为浮点数, 功能有点像css的grid的fr , 不为0时

GridBagLayout

  • columnWidths 用int数组设置的数量和宽度
  • rowHeights 用int数组设置的数量和宽度
  • columnWeights double数组, 默认是空,
  • rowWeights double数组, 默认是空,
columnWidths 和 rowHeights

三行三列

GridBagLayout gbl = new GridBagLayout(); frame.setLayout(gbl);
gbl.columnWidths=new int[]{200,200,200}; // 用数组设置列
gbl.rowHeights = new int[]{100,100,100}; // 用数组设置行

单行单列

GridBagLayout gbl = new GridBagLayout(); frame.setLayout(gbl);
gbl.columnWidths=new int[]{200}; // 用数组设置列
gbl.rowHeights = new int[]{100}; // 用数组设置行
columnWeights 和 rowWeights

columnWeights
columnWeights是一个double数组,它包含一组可以覆盖已计算列权重的值。如果这个字段是非空的,那么在所有列的权重被计算之后,这些值将被应用到GridBag布局中。如果columnWeights数组中的某个元素的值大于对应列的权重,那么该列将被分配columnWeights数组中对应元素的值作为权重。然而,如果columnWeights数组的元素数量超过列的数量,多余的元素将被忽略,而不会导致创建更多的列。

/**
 * This field holds the overrides to the column weights.
 * If this field is non-{@code null} the values are
 * applied to the gridbag after all of the columns
 * weights have been calculated.
 * If {@code columnWeights[i] >} weight for column i, then
 * column i is assigned the weight in {@code columnWeights[i]}.
 * If {@code columnWeights} has more elements than the number
 * of columns, the excess elements are ignored - they do
 * not cause more columns to be created.
 *
 * @serial
 */
public double[] columnWeights;
此字段包含列权重的覆盖。如果此字段非空,则值将在计算完所有列权重后应用于网格包。如果columnWeights[i] > column i的权重,则column i被分配columnWeights[i]中的权重。如果columnWeights的元素多于列数,则多余的元素将被忽略 - 它们不会导致创建更多的列。

rowWeights
rowWeights是一个double数组,它包含行权重的覆盖值。如果该字段不为空,则在计算完所有行权重后,这些值将被应用到网格包中。如果rowWeights[i]的值大于第i行的权重,则第i行将被分配rowWeights[i]中的权重。如果rowWeights的元素数量超过行数,多余的元素将被忽略,并且不会导致创建更多的行。

/**
 * This field holds the overrides to the row weights.
 * If this field is non-{@code null} the values are
 * applied to the gridbag after all of the rows
 * weights have been calculated.
 * If {@code rowWeights[i] > } weight for row i, then
 * row i is assigned the weight in {@code rowWeights[i]}.
 * If {@code rowWeights} has more elements than the number
 * of rows, the excess elements are ignored - they do
 * not cause more rows to be created.
 *
 * @serial
 */
这个字段持有对行权重的覆盖。如果这个字段非空,那么这些值将在所有行权重被计算后应用于网格包(GridBag)。如果rowWeights[i] > i行的权重,那么i行将分配rowWeights[i]中的权重。如果rowWeights的元素数量超过行数,多余的元素将被忽略,它们不会导致创建更多的行。
public double[] rowWeights;

GridBagConstraint

GridBagConstraints 类包含许多用于定义这些约束的字段和方法。以下是一些常用的字段:

  • gridxgridy:指定组件在网格中的位置。
  • gridwidthgridheight:指定组件跨越的网格单元数量。
  • weightxweighty:指定组件在其行或列中的额外空间分配比例。
  • anchor:指定组件在其网格单元中的对齐方式。
  • fill:指定组件在其网格单元中的填充方式。
  • insets:指定组件的边缘间距。

GridBagConstraints源码的无参构造方法,可看出默认值

    public GridBagConstraints () {
        gridx = RELATIVE; //从0开始第几列; 默认RELATIVE=-1,表示add时自动加列
        gridy = RELATIVE; //从0开始第几行; 默认RELATIVE=-1,表示add时自动加行
        gridwidth = 1;  //如同colspan,横跨几列
        gridheight = 1;  //如共同rowspan,竖跨几行

        weightx = 0;  //浮点数, 功能有点像css的grid的fr
        weighty = 0;  //浮点数, 功能有点像css的grid的fr
        anchor = CENTER;
        fill = NONE;

        insets = new Insets(0, 0, 0, 0);
        ipadx = 0;  // 增加子件宽度, weightx=0时才有用
        ipady = 0;  // 增加子件高度, weighty=0时才有用
    }

GridBagConstraints源码的设参构造方法

    public GridBagConstraints(int gridx, int gridy,
                              int gridwidth, int gridheight,
                              double weightx, double weighty,
                              int anchor, int fill,
                              Insets insets, int ipadx, int ipady) {
        this.gridx = gridx;
        this.gridy = gridy;
        this.gridwidth = gridwidth;
        this.gridheight = gridheight;
        this.fill = fill;
        this.ipadx = ipadx;
        this.ipady = ipady;
        this.insets = insets;
        this.anchor  = anchor;
        this.weightx = weightx;
        this.weighty = weighty;
    }

anchor

anchor中文意思是: 锚(n), 抛锚(v)

anchor 属性决定了组件在其单元格中的位置。例如,如果 anchor 被设置为 GridBagConstraints.WEST,组件将被左对齐。

以下是一些可能的 anchor 值:

  • GridBagConstraints.CENTER:将组件居中在其单元格中(默认)。
  • GridBagConstraints.NORTH:将组件与其单元格的顶部对齐。
  • GridBagConstraints.SOUTH:将组件与其单元格的底部对齐。
  • GridBagConstraints.EAST:将组件与其单元格的右侧对齐。
  • GridBagConstraints.WEST:将组件与其单元格的左侧对齐。
  • GridBagConstraints.NORTHWEST:将组件与其单元格的左上角对齐。
  • GridBagConstraints.NORTHEAST:将组件与其单元格的右上角对齐。
  • GridBagConstraints.SOUTHWEST:将组件与其单元格的左下角对齐。
  • GridBagConstraints.SOUTHEAST:将组件与其单元格的右下角对齐。

还有更多取值,如与基线对齐相关的: GridBagConstraints.BASELINE, GridBagConstraints.BASELINE_LEADING, 和 GridBagConstraints.BASELINE_TRAILING 等值

anchor还有更多的取值,

此属性接受三种类型的值:相对于方向(orientation relative)、相对于基线(baseline relative)和绝对位置(absolute)。

  • 绝对位置值不依赖于其他因素,包括:CENTER(中心)(默认值)、NORTH(北)、NORTHEAST(东北)、EAST(东)、SOUTHEAST(东南)、SOUTH(南)、SOUTHWEST(西南)、WEST(西)和NORTHWEST(西北)。

  • 相对于方向的值依赖于容器的组件方向属性,包括:PAGE_START(页面开始)、PAGE_END(页面结束)、LINE_START(行开始)、LINE_END(行结束)、FIRST_LINE_START(第一行开始)、FIRST_LINE_END(第一行结束)、LAST_LINE_START(最后一行开始)和LAST_LINE_END(最后一行结束)。

  • 相对于基线的值依赖于基线位置,包括:BASELINE(基线)、BASELINE_LEADING(基线前导)、BASELINE_TRAILING(基线后尾)、ABOVE_BASELINE(基线之上)、ABOVE_BASELINE_LEADING(基线之上前导)、ABOVE_BASELINE_TRAILING(基线之上后尾)、BELOW_BASELINE(基线之下)、BELOW_BASELINE_LEADING(基线之下前导)和BELOW_BASELINE_TRAILING(基线之下后尾)。

默认值是 CENTER,表示组件居中放置。GridBagConstraints.CENTER


fill

这个字段用于当组件的显示区域大于组件所请求的大小时。它决定了是否要调整组件的大小,以及如果要调整,该如何调整。

对于填充(fill)属性,以下值是有效的:

• NONE:不调整组件的大小。(默认值)
• HORIZONTAL:使组件足够宽,以水平填充其显示区域,但不改变其高度。
• VERTICAL:使组件足够高,以垂直填充其显示区域,但不改变其宽度。
• BOTH:使组件完全填充其显示区域。

默认值是NONE。这意味着,除非明确指定,否则组件的大小不会进行调整以适应其显示区域。




weightxweighty
gbc.weightx ; gbc.weighty; 可实现css的grid的fr的效果

在这里插入图片描述
注意f下面代码or循环中的gbc.weighty = gbc.weightx = r*c;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class T2311300901 {
	
	public static void main(String...arguments)throws Exception{
		JFrame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
		frame.setBounds(100, 100, 800, 600);
		frame.addWindowListener(new WindowAdapter() {
			@Override public void windowClosing(WindowEvent wev) {
				System.exit(100);
			}
		});
		
		GridBagLayout gbl = new GridBagLayout();
//		gbl.columnWidths = new int[]{200,200,200}; // 用数组设置列
//		gbl.rowHeights   = new int[]{100,100,100,100,100}; // 用数组设置行
		
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.fill = GridBagConstraints.BOTH;
//		gbc.anchor = GridBagConstraints.EAST;
		gbc.gridwidth = 1;  gbc.gridheight = 1; 
		gbc.ipadx = 0;      gbc.ipady = 0;
		gbc.weightx = 0;    gbc.weighty = 0;
		
		JPanel panel = new JPanel(gbl); frame.getContentPane().add(panel);
		
		int xc=3 , yc=3;
		
		JButton jbtA2[][] = new JButton[yc][];
		
		for(int r=0;r<yc;r++) {
			jbtA2[r] = new JButton[xc];
			for(int c=0;c<xc;c++) {
				gbc.gridx=c;
				gbc.gridy=r;
				gbc.weighty = gbc.weightx = r*c;
				JButton jbt = new JButton("<html><div style='color:red;'>"+"R"+r+"C"+c+"</div></html>");
//				gbl.setConstraints(jbt, gbc);  panel.add(jbt);   // 可用 panel.add(jbt, gbc); 取代
				//👆👇上下句效果一样,二选一
				panel.add(jbt, gbc);
			}
			
		}
		frame.setVisible(true);
	}
}




用 GridBagLayout 和 GridBagConstraints 来居中

例1 , 单网格居中
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class GridBag居中 {
	
	static JFrame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
	static GridBagLayout frameGbl = new GridBagLayout();
	static GridBagConstraints frameGbc = new GridBagConstraints();
	static {
		frame.addWindowListener(new WindowAdapter() {
			@Override public void windowClosing(WindowEvent ev) {
				System.exit(0);
			}
		});
		frame.setBounds(100, 100, 800, 600);
		frame.setLayout(frameGbl);
	}
	
	
	static JButton jbt = new JButton("jbt001");
	static {
		GridBagLayout gbl = frameGbl; GridBagConstraints gbc = frameGbc;
		// 将布局设为一列一行, 如果不设定, 在只加入一个子组件时也会自动变为一列一行, 但是没有高宽, 即便fill=BOTH,由于网格的高宽为0,子组件依然是原始大小
		gbl.columnWidths = new int[] {300};  // 网格宽度
		gbl.rowHeights = new int[] {100};    // 网格高度
		gbc.fill = GridBagConstraints.BOTH;  // 横纵拉伸为和网格一样的宽高, 就可以用 columnWidths 和 rowHeights 来设定子组件的宽高
		frame.add(jbt, gbc);
		// 注意: 此时布局大小只是整个Button的大小,并不是容器的大小, 居中是因为容器的默认, 而不是 anchor 属性默认值的作用
	}
	
	
	public static void main(String...arguments)throws Exception{
		frame.setVisible(true);
	}

}

效果
在这里插入图片描述
关键代码

		// 将布局设为一列一行, 如果不设定, 在只加入一个子组件时也会自动变为一列一行, 但是没有高宽, 即便fill=BOTH,由于网格的高宽为0,子组件依然是原始大小
		gbl.columnWidths = new int[] {300};  // 网格宽度
		gbl.rowHeights = new int[] {100};    // 网格高度
		gbc.fill = GridBagConstraints.BOTH;  // 横纵拉伸为和网格一样的宽高, 就可以用 columnWidths 和 rowHeights 来设定子组件的宽高
		frame.add(jbt, gbc);
		// 注意: 此时布局大小只是整个Button的大小,并不是容器的大小, 居中是因为容器的默认, 而不是 anchor 属性默认值的作用

还有一些属性因为默认值就满足要求,所以不用设置

注意: 此时布局大小只是整个Button的大小,并不是容器的大小, 居中是因为容器的默认, 而不是 anchor 属性默认值的作用


例2 , 九网格居中
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class GridBag居中2 {
	
	static JFrame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
	static GridBagLayout frameGbl = new GridBagLayout();
	static GridBagConstraints frameGbc = new GridBagConstraints();
	static {
		frame.addWindowListener(new WindowAdapter() {
			@Override public void windowClosing(WindowEvent ev) {
				System.exit(0);
			}
		});
		frame.setBounds(100, 100, 800, 600);
		frame.setLayout(frameGbl);
	}
	
	
	static JButton jbt = new JButton("""
			<html>
				<span style="font-size:30px; color:blue; ">按钮1</span>
			</html>
			""");
	static {
		GridBagLayout gbl = frameGbl; GridBagConstraints gbc = frameGbc;
		// 将布局设为一列一行, 如果不设定, 在只加入一个子组件时也会自动变为一列一行, 但是没有高宽, 即便fill=BOTH,由于网格的高宽为0,子组件依然是原始大小
		gbl.columnWidths = new int[] {9999,300,9999};  // 网格宽度, 设置3列, 只要左右相等,就能居中,即便总数超过容器宽度
		gbl.rowHeights = new int[] {666,300,666};    // 网格高度, 设置3列, 只要左右相等,就能居中,即便总数超过容器高度
		gbc.fill = GridBagConstraints.BOTH;  // 横纵拉伸为和网格一样的宽高, 就可以用 columnWidths 和 rowHeights 来设定子组件的宽高
		gbc.gridx=1; gbc.gridy=1;  // 放到中间格(横竖第二格),索引从0开始,所以第二格的索引号是1
		gbc.anchor = GridBagConstraints.WEST;
		frame.add(jbt, gbc);
	}
	
	
	public static void main(String...arguments)throws Exception{
		frame.setVisible(true);
	}

效果

在这里插入图片描述

关键代码

		// 将布局设为一列一行, 如果不设定, 在只加入一个子组件时也会自动变为一列一行, 但是没有高宽, 即便fill=BOTH,由于网格的高宽为0,子组件依然是原始大小
		gbl.columnWidths = new int[] {9999,300,9999};  // 网格宽度, 设置3列, 只要左右相等,就能居中,即便总数超过容器宽度
		gbl.rowHeights = new int[] {666,300,666};    // 网格高度, 设置3列, 只要左右相等,就能居中,即便总数超过容器高度
		gbc.fill = GridBagConstraints.BOTH;  // 横纵拉伸为和网格一样的宽高, 就可以用 columnWidths 和 rowHeights 来设定子组件的宽高
		gbc.gridx=1; gbc.gridy=1;  // 放到中间格(横竖第二格),索引从0开始,所以第二格的索引号是1
		gbc.anchor = GridBagConstraints.WEST;
		frame.add(jbt, gbc);

可以用边缘网格控制中间网格的位置, 只居中时, 可以将左右上下网格的高宽设很大,只要左等于右,上等于下,就能居中,并且可以用中间网格的大小调整子组件的大小

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMD 发布新芯片MI300,支持训练和运行大型语言模型

AMD 宣布推出 MI300 芯片&#xff0c;其 Ryzen 8040移动处理器将于2024年用于笔记本电脑。 AMD官方网站&#xff1a;AMD ׀ together we advance_AI AMD——美国半导体公司专门为计算机、通信和消费电子行业设计和制造各种创新的微处理器&#xff08;CPU、GPU、主板芯片组、电…

剧本杀小程序系统开发,助力剧本杀市场创新发展

近年来&#xff0c;剧本杀发展速度非常快&#xff0c;短短几年内&#xff0c;就发展到了百亿元的市场规模&#xff01; 在互联网的发展下&#xff0c;剧本杀迎来了新的发展模式--线上剧本杀。线上剧本杀能够让玩家体验到智能化、趣味化的游戏乐趣&#xff0c;不受时间、地点限…

7+共病+PPI分析+转录调控,纯生信靠这个思路也能拿7+

今天给同学们分享一篇生信文章“Exploring the Pathogenesis of Psoriasis Complicated With Atherosclerosis via Microarray Data Analysis”&#xff0c;这篇文章发表在Front Immunol期刊上&#xff0c;影响因子为7.3。 结果解读&#xff1a; 差异表达基因的鉴定 该研究的…

侯捷C++ (二--STL标准库)2

适配器 adapter 也可以叫做改造器&#xff0c;改造已经存在的东西 有&#xff1a;仿函数适配器、迭代器适配器、容器适配器 实现适配&#xff0c;可以使用继承、复合的两种方式实现。 共性&#xff1a;STL使用复合来实现适配 容器适配器 包括stack、queue&#xff0c;内含一…

MacOS 14.1 配置kerberos认证

MacOS 14.1 配置kerberos认证 MacOS 14.1 配置kerberos认证krb5.conf票据显示程序问题参考地址 MacOS 14.1 配置kerberos认证 原操作系统为 10.14.*&#xff0c;因安装别的软件失败&#xff0c;不想去找旧版本了&#xff0c;所以把OS直接升级到最新版的14.1啦&#xff0c;升级…

[MySQL] SQL优化之性能分析

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、索引优化 1、索引是什么&#xff1a; 2、索引的数据结构&#xff1a; 3、索引种类&#xff1a; 4、sql分析&#xff08;回表查询&#xff09; 二、定位慢查询语句 1、慢查询日志 2、profile详情 3、…

嵌入式开发按怎样的路线学习较好?

嵌入式开发按怎样的路线学习较好&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「嵌入式从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&…

一文读懂:GPU最强“辅助“HBM到底是什么?

各位ICT的小伙伴们大家好呀。 我是老猫。 今天我们聊聊GPU背后的女人&#xff0c;不对&#xff0c;是背后的大赢家-HBM。 那么&#xff0c;HBM究竟是什么呢&#xff1f;为何在AI时代如此火热&#xff1f;下面我们就一一道来。 ▉ HBM到底为何方神圣&#xff1f; HBM全称为H…

C++ Qt开发:如何使用信号与槽

在Qt中&#xff0c;信号与槽&#xff08;Signal and Slot&#xff09;是一种用于对象之间通信的机制。是Qt框架引以为傲的一项机制&#xff0c;它带来了许多优势&#xff0c;使得Qt成为一个强大且灵活的开发框架之一。信号与槽的关联通过QObject::connect函数完成。这样的机制使…

【LeetCode刷题-链表】-- 143.重排链表

143.重排链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ clas…

【JavaWeb笔记】单选框,结合Servlet

各个部分的作用 jsp部分 form action"..."&#xff1a;表单标签&#xff0c;供用户提交数据。内部的submit点击之后相当于是点action的URL input type"radio"&#xff1a;输入类型为单选框。把name设置为一样的&#xff0c;这样效果上就是单选&#xff…

【一周安全资讯1209】《网络安全事件报告管理办法》公开征求意见;IDC发布《大模型在网络安全领域的应用市场洞察报告》

要闻速览 1、国家互联网办公室《网络安全事件报告管理办法》公开征求意见 2、国家标准《信息安全技术 政务计算机终端核心配置规范》公开征求意见 3、IDC发布《大模型在网络安全领域的应用市场洞察报告》 4、赛迪顾问发布《2023中国私有云市场研究报告》 5、美国知名基因测试公…

C#泛型(详解)

前言 介绍C# 入门经典第8版书中的第12章《泛型》 一、泛型的含义 为引出泛型的概念&#xff0c;我们先来看看我们前面提到的 集合类https://blog.csdn.net/qq_71897293/article/details/134684612?spm1001.2014.3001.5501 这些集合是没有具体类型化的&#xff0c;所以…

电脑待机怎么设置?让你的电脑更加节能

在日常使用电脑的过程中&#xff0c;合理设置待机模式是一项省电且环保的好习惯。然而&#xff0c;许多用户对于如何设置电脑待机感到困扰。那么电脑待机怎么设置呢&#xff1f;本文将深入探讨三种常用的电脑待机设置方法&#xff0c;通过详细的步骤&#xff0c;帮助用户更好地…

想进阶JAVA高级程序员吗?多线程必学

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…

openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup

文章目录 openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup151.1 背景信息151.2 前提条件151.3 语法151.4 示例151.5 从备份文件恢复数据 openGauss学习笔记-151 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_basebackup 151.1 …

使用xshell连接虚拟机(服务器)

作者&#xff1a;余小小 Xshell Xshell [1] 是一个强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以…

【XR806开发板试用】编译FreeRTOS系统

编译FreeRTOS系统&#xff0c;测试串口输出。 一、下载源码 1.1、获取源码 下载源码: rootubuntu:/home# wget https://bbs.aw-ol.com/assets/uploads/files/1693988430633-xr806_sdk.tar.gz 解压文件 rootubuntu:/home# tar xvf 1693988430633-xr806_sdk.tar.gz 1.2、获取…

亚马逊鲲鹏系统自动化操作更节约时间

亚马逊鲲鹏系统的自动化操作为卖家们带来了极大的时间节约和高效运营的利好。这一先进系统在账号注册、养号和下单等方面拥有强大的自动化功能&#xff0c;为卖家提供了简单便捷的操作体验。 首先&#xff0c;亚马逊鲲鹏系统在账号注册方面展现了其强大的自动化能力。用户只需事…

记录一次postgresql临时表丢失问题

项目相关技术栈 springboot hikari连接池pgbouncerpostgresql数据库 背景 为了优化一个任务执行的速度&#xff0c;我将任务的sql中部分语句抽出生成临时表&#xff08;create temp table tempqw as xxxxxxxxx&#xff09;&#xff0c;再和其他表关联&#xff0c;提高查询速…