JavaAwt用setLocation()setSize()setBounds()调位置尺寸时,要用 父组件.setLayout(null); 移除layout

60 阅读3分钟

JavaAwtSwingComponent用setLocation()setSize()setBounds()调位置尺寸时,要用 父组件.setLayout(null);移除layout

父组件.setLayout(null)frame.setLayout(null)

package component;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JLabel;

public class SetSizeLocationBounds要将layout设为null {
	
	public static void main(String...arguments)throws Exception{
		
		Frame frame = new Frame(Thread.currentThread().getStackTrace()[1].getClassName());
		
		frame.addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent windowEvent) {
				System.exit(0);
			}
		});
		
		frame.setBounds(100, 100, 1024, 768);
		
		//父组件移除layout后, 子件setLocation()setSize()setBounds()才有效
		frame.setLayout(null); 
		
		JLabel jlb010 = new JLabel("JLabel010,<br>JLabel的文字默认是垂直居中水平靠左的"); frame.add(jlb010);
		//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
		jlb010.setOpaque(true);	jlb010.setBackground(Color.GRAY); jlb010.setForeground(Color.CYAN);
		jlb010.setLocation(300, 555);
		jlb010.setSize(400, 100);
		
		Label lb010 = new Label("Label010 Label中文显示是否正常"); frame.add(lb010);
		lb010.setBackground(new Color(66,55,44,200));
		lb010.setLocation(800,555);
		lb010.setSize(100, 100);
		
		
		JLabel jlb020 = new JLabel("<html><body style='background:blue;padding:10px;'>"
				+ "<div>jlb020</div>"
				+ "</body></html>"); 
		frame.add(jlb020);
		jlb020.setLocation(10,555);		jlb020.setSize(200,100);
//		jlb020.setBounds(20, 500, 200, 100);
		//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
		jlb020.setOpaque(true); jlb020.setBackground(Color.cyan);
		
		
		
		JLabel jlb030 = new JLabel("<html><body style='background:yellow;color:red;'>"
				+ "<div style='font-size:20px; text-align:center; color:black;'>jlb030</div>"
				+ "<div>JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见</div>"
				+ "可看到JLabel的html设置的background在JLabel本身的background上,未必会覆盖整个JLabel"
				+ "</body></html>"); 
		frame.add(jlb030);
		jlb030.setBounds(10, 5, 800, 100);
		//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
		jlb030.setOpaque(true); jlb030.setBackground(Color.cyan); 
		//
		jlb030.setForeground(Color.DARK_GRAY);
		
		
		
		JLabel jlb040 = new JLabel("<html><body style='background:green;color:red;'>"
				+ "<div style='font-size:20px; text-align:center; color:black;'>jlb040</div>"
				+ "<div>JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见</div>"
				+ "<div>JLabel可以在new时指定水平对齐方式, 垂直对齐方式要之后使用方法, <br>JLabel的文字默认是垂直居中水平靠左的</div>"
				+ "</body></html>"
				, JLabel.CENTER); 
		frame.add(jlb040);
		jlb040.setBounds(10, 150, 800, 150);
		//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
		jlb040.setOpaque(true); jlb040.setBackground(Color.cyan); 
		//
		jlb040.setForeground(Color.DARK_GRAY);
//		jlb040.setHorizontalAlignment(JLabel.CENTER);
//		jlb040.setVerticalAlignment(JLabel.BOTTOM);
		
		
		
		JLabel jlb050 = new JLabel("<html><body style='background:blue;color:red;'>"
				+ """
						<ul>
							<li>JLabel可通过setHorizontalAlignment(JLabel.RIGHT);设置水平对齐方式</li>
							<li>JLabel可通过etVerticalAlignment(JLabel.BOTTOM);设置垂直对齐方式</li>
						</ul>
						"""
				+ "</body></html>"
				); 
		frame.add(jlb050);
		jlb050.setBounds(0, 350, 800, 150);
		//JLabel默认是透明的, 要setOpaque(true)设为不透明, setBackground的背景色才看得见
		jlb050.setOpaque(true); jlb050.setBackground(Color.cyan); 
		//
		jlb050.setForeground(Color.DARK_GRAY);
		jlb050.setHorizontalAlignment(JLabel.RIGHT);
		jlb050.setVerticalAlignment(JLabel.BOTTOM);
		
		frame.setVisible(true);
	}

}

在这里插入图片描述

javaAwtSwing的一些布局layout

所属类包布局管理器名称说明
Java.awtFlowLayout(流式布局)组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列
Java.awtBorderLayout(边界布局)容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。
Java.awtGridLayout(网格布局容器的空间划分成M×N列的网格区域, 每个区域只能放置一个组件。
Java.awtCardLayout(卡片布局)如同一叠牌,每个牌对应一个组件,但每次只能显示其中的一张牌。适用于在一个空间中防止多个组件的情况
Java.awtGridBagLayout(网格包布局)GridLayout的升级版,组件仍然是按照行、列放置,但是每个组件可以占据多个网格
Java.swingBoxLayout(箱式布局)允许在容器中纵向或者横向放置多个控件
Java.swingSprigLayout(弹簧布局)根据一组约束条件放置控件
空布局不使用布局管理器,按照控件自身提供的大小、位置信息放置控件