java学习笔记(十四)Swing的布局管理器

本文详细介绍了Java Swing中的三种布局管理器:FlowLayout、GridLayout和GridBagLayout。FlowLayout默认从左到右排列组件,GridLayout平均分配空间,而GridBagLayout则提供了更灵活的单元格布局方式,可以动态计算单元格数量,并通过weightx和weighty调整组件在容器变化时的伸缩比例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FlowLayout是一种最简单的布局管理器。

FlowLayout有三个参数,用来调整容器中的组件排列;

组件的对齐策略:默认情况下从左到右地排列,多余的空间会剩余在两边,也就是居中对齐,FlowLayout类中是使用int值表示对齐策略的。居中对应的就是FlowLayout.CENTER。

组件水平间距:也就是同一行中组件之间的间距

组件垂直间距:两行之间组件的间距,单位是像素

package com.javaeasy.learncomponent;

import javax.swing.JFrame;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Point;
import java.awt.FlowLayout;
import javax.swing.JButton;

public class LearnBorderLayout {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame frame =new JFrame();
		frame.setSize(600,250);
		frame.setLocation(new Point(250,300));
		frame.setTitle("学习Swing的布局管理器");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container container =frame.getContentPane();
		BorderLayout layout=new BorderLayout();
		container.setLayout(layout);
		JButton btn1=new JButton("east");
		JButton btn2=new JButton("south");
		JButton btn3=new JButton("west");
		JButton btn4=new JButton("north");
		JButton btn5=new JButton("Mid");
		container.add(btn1,BorderLayout.EAST);
		container.add(btn2,BorderLayout.WEST);
		container.add(btn3,BorderLayout.SOUTH);
		container.add(btn4,BorderLayout.NORTH);
		container.add(btn5,BorderLayout.CENTER);
		frame.setVisible(true);
	
	}

}

  

平均分割之----GridLayout

他的作用是将容器分割成大小相等的单元格。每个添加进去的组件都将占用其中的一个单元格,如果有剩余,那么也不会被占用。

package com.javaeasy.learncomponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Point;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;

public class ShowLayoutComponent {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame frame =new JFrame();
		JMenuBar menuBar =new JMenuBar();
		frame.setJMenuBar(menuBar);
		menuBar.add(new JMenu("这是菜单"));
		menuBar.add(new JMenu("这是菜单"));
		menuBar.add(new JMenu("这是菜单"));
		frame.setSize(600,250);
		frame.setTitle("这是一个窗口");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container container =frame.getContentPane();
		container.setLayout(new GridLayout(3,2));
		container.add(new JLabel("这是一个文本框,用户可以用它输入文字"));
		container.add(new JComboBox(new Object[] {"这是一个组合框,可以用来下拉并选择其中的条目","adsad a"}));
		container.add(new JButton("这是一个按钮,用户可以单击按钮"));
		frame.setVisible(true);
	
	}

}

 最强大的布局管理者---GridBagLayout

它也是将容器以单元格格式划分,但它更加灵活

它会将容器划分为一个个单元格,单元格的大小取决于其中放置的组件等各种因素。但需要动态计算单元格的数量

gridx:放置组件起始单元格的横坐标

gridy:放置组件起始单元格的纵坐标

gridwidth:当前组件横向占用的单元格数

gridheigh:当前组件纵向占用的单元格数

fill;其属性值为:NONE,HORIZONTAL,VERTICAL,BOTH.其默认值为NONE,代表组件保持自己最佳的长和宽。如果值为HORIZONTAL,组件将放弃自己原有的长度,尽力满足组件所在的单元格的长度,如果值为VERTICAL,组件将放弃自己原有的高度,尽力去满足单元格高度,如果组件是BOTH,组件将放弃自己的长和宽,尽全力去满足单元格

weightx:到容器大小改变时,组件将所占用的水平区域的比重

weighty:到容器大小改变时,组件所占用的垂直区域的比重

package com.javaeasy.learncomponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Point;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Panel;

import javax.swing.JButton;
import javax.swing.JComboBox;

public class LearnGridBagLayout {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame frame =new JFrame();
		frame.setSize(300,300);
		frame.setLocation(new Point(100,300));
		frame.setTitle("学习Swing布局管理器");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container container =frame.getContentPane();
		GridBagLayout layout =new GridBagLayout();
		container.setLayout(layout);
		GridBagConstraints gbc =new GridBagConstraints();
		JButton btn1=new JButton("按钮一");
		JButton btn2=new JButton("按钮二");
		JButton btn3=new JButton("按钮三");
		Panel panel = new Panel();
		panel.setBackground(Color.ORANGE);
		JPanel pane12 =new JPanel();
		pane12.setBackground(Color.BLUE);
		gbc.gridx=0;
		gbc.gridy=0;
		gbc.gridwidth=1;
		gbc.gridheight=1;
		gbc.fill=GridBagConstraints.NONE;
		container.add(btn1,gbc);
		gbc.gridx=1;
		container.add(panel,gbc);
		gbc.gridx=0;
		gbc.gridy=1;
		gbc.gridwidth=2;
		gbc.fill=GridBagConstraints.BOTH;
		gbc.weightx=1.0;
		gbc.weighty=0;
		container.add(btn2,gbc);
		gbc.gridx=2;
		gbc.gridy=0;
		gbc.gridwidth=1;
		gbc.gridheight=2;
		gbc.fill=GridBagConstraints.BOTH;
		gbc.weightx=0;
		gbc.weighty=0;
		container.add(btn3,gbc);
		gbc.gridx=0;
		gbc.gridy=2;
		gbc.gridwidth=3;
		gbc.gridheight=1;
		gbc.fill=GridBagConstraints.BOTH;
		gbc.weightx=1.0;
		gbc.weighty=1.0;
		container.add(pane12,gbc);
		frame.setVisible(true);
		
	
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值