Swing组件布局setLayout(null)和setBounds(int,int,int,int)用法及组件分层显示

2024-01-05 03:38

本文主要是介绍Swing组件布局setLayout(null)和setBounds(int,int,int,int)用法及组件分层显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Swing组件布局setLayout(null)和setBounds(int,int,int,int)用法及组件分层显示

在Swing组件布局中一般性设置控件位置和大小:使用.setBounds(int,int,int,int)设置控件坐标大小.但必须加.setLayout(null);

例如下面这段代码虽然利用了setBounds(int,int,int,int)进行布局,但是运行后图一显示的的结果并不是按照布局显示的,而是按照默认的FlowLayout(每个JPanel对象初始化时都使用FlowLayout布局,)布局显示的

import javax.swing.*;
public class JLabelDemo extends JFrame{

private JButton btn1;
private JButton btn2;
private JButton btn3;
private JPanel pane;


public JLabelDemo(){
pane=new JPanel(); //创建面板
btn1=new JButton("按钮1"); //创建按钮1
btn1.setBounds(100, 100, 100, 100); //setBounds(int,int,int,int)设置控件坐标大小
btn2=new JButton("按钮2"); //创建按钮2
btn2.setBounds(200, 100, 100, 100);
btn3=new JButton("按钮3"); //创建按钮1
btn3.setBounds(100, 200, 100, 100);
pane.add(btn1);
pane.add(btn2);
pane.add(btn3); // 将组件添加到面板中
this.add(pane); //将面板添加到窗体
this.setVisible(true);
this.setBounds(100,100,400,400);
}

public static void main(String args[]){
new JLabelDemo();
}
}


图一
当我们在构造函数中加入setLayout(null)时,则会按照我们规定的位置显示,显示结果图二,程序如下,通过对比我们可以发现,我们两个程序的不同之处就在于第二个程序中我们创建面板后添加了pane.setLayout(null),这些细节问题希望大家多多注意:
这是因为
布局管理器    就是管理布局嘛    和他对应的就是用绝对坐标进行定位   你把布局管理器设为null   它不知道怎么布局了  不知道组件放到哪 啊~~
所以,只能用绝对坐标来进行定位!
import javax.swing.*;
public class JLabelDemo extends JFrame{
private JButton btn1;
private JButton btn2;
private JButton btn3;
private JPanel pane;


public JLabelDemo(){
pane=new JPanel(); //创建面板
pane.setLayout(null);
btn1=new JButton("按钮1"); //创建按钮1
btn1.setBounds(100, 100, 100, 100); //setBounds(int,int,int,int)设置控件坐标大小
btn2=new JButton("按钮2"); //创建按钮2
btn2.setBounds(200, 100, 100, 100);
btn3=new JButton("按钮3"); //创建按钮1
btn3.setBounds(100, 200, 100, 100);
pane.add(btn1);
pane.add(btn2);
pane.add(btn3); // 将组件添加到面板中
this.add(pane); //将面板添加到窗体
this.setVisible(true);
this.setBounds(100,100,400,400);
}

public static void main(String args[]){
new JLabelDemo();
}
}


控件被添加的先后顺续决定控件是否可见.即:窗口按层来显示控件./*先添加的控件放在第一层后添加的放在后一层.*/如果先添加的控件大小大于后添加的并两控件处于同一位置则先添加的控件覆盖后添加的.因此如果想然所有控件都可见则需将在同一位置的两控件择面积小的先添加而后才是面积大的.下面举例说明这一点
还是刚才的例子我们稍微做一下改动我们将上面的程序中 btn1.setBounds(100, 100, 100, 100); 改为btn1.setBounds(100, 100, 200, 200);
显示结果为
我们再将按钮添加到面板的顺序换一下看看会出现什么结果,找上面程序到这里
pane.add(btn1);
pane.add(btn2);
现在交换添加顺序即变成
pane.add(btn2);
pane.add(btn1);
则显示结果为
一点小小的学习心得与大家共享,不足之处请大家多多指教,


这篇关于Swing组件布局setLayout(null)和setBounds(int,int,int,int)用法及组件分层显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

bytes.split的用法和注意事项

当然,我很乐意详细介绍 bytes.Split 的用法和注意事项。这个函数是 Go 标准库中 bytes 包的一个重要组成部分,用于分割字节切片。 基本用法 bytes.Split 的函数签名如下: func Split(s, sep []byte) [][]byte s 是要分割的字节切片sep 是用作分隔符的字节切片返回值是一个二维字节切片,包含分割后的结果 基本使用示例: pa

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除