Java页面布局

这篇具有很好参考价值的文章主要介绍了Java页面布局。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java页面常用的布局主要有五种:FlowLayout、BorderLayout、GridLayout、CardLayout和NULL

1、FlowLayout

称为“流布局”,将组件按从左到右顺序、流动的安排到容器中,直到占满上方的空间时、则向下移动一行,Flow Layout是面板的默认布局

Flow Layout的构造方法列表
方法 功能说明
Flow Layout() 中间对齐,默认间距为5像素
Flow Layout(int align) 指定对齐方式,默认间距为5像素
Flow Layout(int align,int hgap,int vgap) 指定对齐方式、水平和垂直间距

比如下面这段代码,默认情况是居中对齐,水平和垂直间距为5个像素

package javase;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class test {
	JFrame frame=new JFrame("test");//创建一个新的、不可见的、名为test的窗体
	JButton btn1=new JButton("button1");
	JButton btn2=new JButton("button2");
	JButton btn3=new JButton("button3");
	JButton btn4=new JButton("button4");
	public test() {
		frame.setLayout(new FlowLayout());//设置窗口的布局管理器
		frame.setSize(300,200);//设置窗口的大小
		frame.setLocation(300, 100);
		frame.add(btn1);
		frame.add(btn2);
		frame.add(btn3);
		frame.add(btn4);
		frame.setVisible(true);//设置窗口可见
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(()->{//当GUI越来越大的时候可以避免线程之间发生错误
	new test();
		});
	}

}

运行结果如下:

Java页面布局

给它添加参数后,比如添加左对齐,水平10个像素,垂直15个像素,效果如下

	frame.setLayout(new FlowLayout(FlowLayout.LEFT,10,15));

Java页面布局

注意:采用流布局,当改变窗体的大小时,可以发现各组件的位置随着窗体的变化而变化,而各组件的大小不变,保持原来的“最合适”大小。

Java页面布局

 2、Border Layout

称为“边界布局”,它允许将组件有选择的放置到容器的中部、北部、南部、东部或西部,它是窗体框架的默认布局。

Border Layout的构造方法列表
方法 功能说明
Border Layout() 新的、无间距
Border Layout(int hgap,int vgap) 新的、指定水平、垂直间距

如下面这段代码

package javase;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class test {
	JFrame frame=new JFrame("test");//创建一个新的、不可见的、名为test的窗体
	JButton btn1=new JButton("button1");
	JButton btn2=new JButton("button2");
	JButton btn3=new JButton("button3");
	JButton btn4=new JButton("button4");
	JButton btn5=new JButton("button5");
	public test() {
		frame.setLayout(new BorderLayout());//设置窗口的布局管理器
		frame.setSize(300,200);//设置窗口的大小
		frame.setLocation(300, 100);
		frame.add(btn1,BorderLayout.WEST);
		frame.add(btn2,BorderLayout.EAST);
		frame.add(btn3,BorderLayout.NORTH);
		frame.add(btn4,BorderLayout.SOUTH);
		frame.add(btn5,BorderLayout.CENTER);
		frame.setVisible(true);//设置窗口可见
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(()->{//当GUI越来越大的时候可以避免线程之间发生错误
	new test();
		});
	}

}

 Java页面布局

增加水平和垂直间距后效果如下

frame.setLayout(new BorderLayout(4,4));

Java页面布局

 注意:采用边界布局,当改变窗体的大小时,可以发现东南西北四个位置的组件长度进行拉伸,而中间位置的组件进行扩展

Java页面布局

3、Grid Layout

称为“网格布局”,它像表格一样,按行和列排列所有组件,且每个单元格大小都一样,在向表格里面添加组件的时候,他们将按照从左到右、从上到下的顺序加入

Grid Layout的构造方法列表
方法 功能说明
Grid Layout(int rows,int cols) 新的、指定行数和列数
Grid Layout(int rows,int cols,int hgap,int vgap) 新的、指定行数和列数、水平和垂直间距

比如下面这个计算器的页面布局,输入框位于窗口的北方,其余按钮放在一个容器中置于窗口的中央,容器的布局就是网格布局

package javase;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class test {
	JFrame frame=new JFrame("test");//创建一个新的、不可见的、名为test的窗体
	String name[]= {"7","8","9","+","4","5","6","-","1","2","3","*","0",".","=","/"};
	JPanel panel=new JPanel(new GridLayout(4,4));
	JTextField f=new JTextField(20);
	JButton but[]=new JButton[name.length];
	public test() {
		frame.setLayout(new BorderLayout(4,4));//设置窗口的布局管理器
		frame.setSize(500,300);//设置窗口的大小
		frame.setLocation(300, 100);
		frame.add(f,BorderLayout.NORTH);
		for(int i=0;i<but.length;i++) {
			but[i]=new JButton(name[i]);
			panel.add(but[i]);
		}
		frame.add(panel,BorderLayout.CENTER);
		frame.setVisible(true);//设置窗口可见
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(()->{//当GUI越来越大的时候可以避免线程之间发生错误
	new test();
		});
	}

}

效果如下:

Java页面布局

 

 4、Card Layout

称为卡片布局,它将加入到容器的组件看成一叠卡片,只能看到最上面的组件,通过调用一些方法才能看到其他的组件

Card Layout的方法列表
方法 功能说明
CardLayout() 默认间距为0的新卡片布局
Card Layout(int hgap,int vgap) 指定水平和垂直间距的新卡片布局
frist(Container parent) 显示第一张卡片
last(Container parent) 显示最后一张卡片
previous(Container parent) 显示当前卡片的上一张卡片
next(Container parent) 显示当前卡片的下一张卡片
show(Container parent) 显示指定名片的卡片
package javase;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class test {
	JFrame frame=new JFrame("test");//创建一个新的、不可见的、名为test的窗体
	JButton but1=new JButton("button1");
	JButton but2=new JButton("button2");
	JButton but3=new JButton("button3");
	JButton but4=new JButton("button4");
	CardLayout c=new CardLayout();
	JPanel panel=new JPanel(c);
	public test() {
		frame.setSize(500,300);//设置窗口的大小
		frame.setLocation(300, 100);
		panel.add("1",but1);
		panel.add("2",but2);
		panel.add("3",but3);
		panel.add("4",but4);
		frame.add(panel);
	//	c.last(panel);   //显示最后一张卡片,即button4
	//	c.show(panel, "2");  //显示名称是2的卡片,显示结果是button2
		frame.setVisible(true);//设置窗口可见
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(()->{//当GUI越来越大的时候可以避免线程之间发生错误
	new test();
		});
	}

}

这段代码显示的是button1,结果如下

Java页面布局

 注意:采用卡片布局,当改变窗口大小时,可以发现卡片上的组件大小随着窗体的变化而变化,并始终占满整个窗口。

5、NULL布局

在实际开发过程中,用户界面比较复杂,使用Flow Layout、Border Layout、Grid Layout和Card Layout这些布局难以满足,这时可以采用NULL布局,即容器不采用任何布局,而是通过设置每个组件在容器中的位置及大小来安排

使用NULL布局的步骤如下:

(1)设置容器的布局为空

panel.setLayout(null);

(2)设置组件的位置及大小

		label1.setBounds(0,0,300,30);
		label2.setBounds(50, 50, 50, 30);
		f1.setBounds(100, 50, 100, 30);
		label3.setBounds(50,100,50,30);
		f2.setBounds(100, 100, 100, 30);

(3)将组件添加到容器中

		panel.add(label1);
		panel.add(label2);
		panel.add(label3);
		panel.add(f1);
		panel.add(f2);
		frame.add(panel);

比如下面这个登录界面

Java页面布局

代码: 

package javase;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class test {
	JFrame frame=new JFrame("test");//创建一个新的、不可见的、名为test的窗体
	JLabel label1=new JLabel("登录界面",JLabel.CENTER);
	JLabel label2=new JLabel("用户名");
	JLabel label3=new JLabel("密码");
	JTextField f1=new JTextField();
	JTextField f2=new JTextField();
	JPanel panel=new JPanel();
	public test() {
		panel.setLayout(null);
		frame.setSize(300,300);//设置窗口的大小
		frame.setLocation(300, 100);
		label1.setBounds(0,0,300,30);
		label2.setBounds(50, 50, 50, 30);
		f1.setBounds(100, 50, 100, 30);
		label3.setBounds(50,100,50,30);
		f2.setBounds(100, 100, 100, 30);
		panel.add(label1);
		panel.add(label2);
		panel.add(label3);
		panel.add(f1);
		panel.add(f2);
		frame.add(panel);
		frame.setVisible(true);//设置窗口可见
	}
	public static void main(String[] args) {
		EventQueue.invokeLater(()->{//当GUI越来越大的时候可以避免线程之间发生错误
	new test();
		});
	}

}

NULL布局一般用于组件之间位置相对固定,并且窗口不允许随便变换大小的情况,否则当窗口大小发生变化时,因所有组件使用绝对位置,会产生组件整体“偏移”的情况。文章来源地址https://www.toymoban.com/news/detail-486698.html

到了这里,关于Java页面布局的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 五个拿来就能用的炫酷登录页面

    ------------- 写在前面 ------------- 上次的博文十个拿来就能用的网页炫酷特效 ,得到了大家的支持!这次我将收藏了很久的炫酷登录页面分享给大家,如果觉得有帮助可以 点赞收藏 支持一下,能 关注 一下就再好不过了o(≧▽≦*)o,之后还会分享更多干货内容,谢谢大家啦!

    2024年02月12日
    浏览(34)
  • 微信小程序学习之五种页面跳转方法.

    这是最常见的一种跳转方式,相当于html里的a标签.但需要注意的是 该方法不能跳转tabbar页面. 格式为: 通过构造js函数,在函数中调用该接口可实现页面跳转的效果.但该接口同样不能跳转tabbar页面.跳转后左上角有返回小箭头,点击可返回原本页面. 格式为:  关闭当前页面,跳转到

    2024年02月09日
    浏览(35)
  • 微信小程序事件点击跳转页面的五种方法

    第一种:标签 这是最常见的一种跳转方式,相当于html里的a标签 第二种:wx.navigateTo({})方法 1.前端wxml 2.js应用 第三种:wx.redirectTo({}) 功能描述: 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。 类似于页面跳转时 重定向页面,类似于html中的 window.open(‘…

    2024年02月16日
    浏览(44)
  • HarmonyOS应用开发实战—开箱即用的应用首页页面【ArkTS】

    HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、平板电脑、智能穿戴、智能家居、车载系统等。HarmonyOS的目标是构建一个统一的、开放的、全场景的操

    2024年02月02日
    浏览(36)
  • redis常用五种数据类型详解

    目录 前言: string 相关命令 内部编码 应用场景 hash 相关命令 内部编码 应用场景 list 相关命令 内部编码 应用场景 set 相关命令 内部编码 应用场景 Zset 相关命令 内部编码 应用场景 渐进式遍历     redis有多种数据类型,常用的有五种,其他都是在特定场景下使用的数据类型。

    2024年02月11日
    浏览(32)
  • HarmonyOS应用开发实战—开箱即用的个人主页页面【ArkTS】

    HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、平板电脑、智能穿戴、智能家居、车载系统等。HarmonyOS的目标是构建一个统一的、开放的、全场景的操

    2024年02月04日
    浏览(39)
  • Redis对象和五种常用数据类型

    对象分为键对象和值对象 键对象一般是string类型 值对象可以是string,list,set,zset,hash Redis对象和数据结构的关系 键总是一个字符串对象 而值可以是五种中的一种 type 命令 得到的结果就是值的类型 可以用object encoding命令查看编码 list数据类型的编码由linkedlist和ziplist编码合并

    2024年02月12日
    浏览(31)
  • 前端刷新页面的五种方法(含原生js、vue和react)

    1、window.history.go(0)方法 2、location.reload()方法 3、location.href=location.href方法 4、vue-router方法 5、react-router方法

    2024年02月16日
    浏览(38)
  • list最常用的遍历五种方式以及使用场景

    目录 遍历方式的适用场景对比 迭代器遍历 列表迭代器  增强for遍历  Lambda表达式 lambda表达式简介  普通for遍历 集合中通用的并且常用的六种方法 迭代器遍历 :在遍历过程中需要删除元素,请使用迭代器 列表迭代器: 在遍历过程中需要添加元素,请使用列表迭代器 增强

    2024年02月16日
    浏览(33)
  • 前端面试经典题--页面布局

    假设高度已知,请写出三栏布局,其中左、右栏宽度各为300px,中间自适应。 浮动解决方式 绝对定位解决方式 flexbox解决方式 表格布局 网格布局 上述5中解决方式是比较常⻅的,但是我们 不能只局限于为了问答而问答,我们应该从此基础上升华一下问题。 答完了这5种常⻅方

    2024年02月09日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包