JavaAwtSwing布局笔记之 java.awt.BorderLayout

317 阅读2分钟

java.awt.BorderLayout

类定义

public class BorderLayout implements LayoutManager2,
                                     java.io.Serializable {

interface👇     interface👇 LayoutManager ▶ LayoutManager2 ▶ BorderLayout




概述

  • BorderLayout分为东西南北中五个区, 每个区只能添加一个java.awt.Component
  • 放在那个区可以由add(Component , Object)的第二个参数决定, 是一个String
    • 东区 BorderLayout.EAST 对应 "East"
    • 西区 BorderLayout.WEST 对应 "West"
    • 南区 BorderLayout.SOUTH 对应 "South"
    • 北区 BorderLayout.NORTH 对应 "North"
    • 中区 BorderLayout.CENTER 对应 "Center"
  • 可以设置行距 如 BorderLayoutInstance.setHgap(200);
  • 可以设置列距 如 BorderLayoutInstance.setVgap(100);
  • 子Component的setPreferredSize(Dimension preferredSize) 在 南北 时 height起作用
  • 子Component的setPreferredSize(Dimension preferredSize) 在 东西 时 width起作用




默认样式

package layout;

import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

import javax.swing.*;

@SuppressWarnings({ "removal", "deprecation" })
public class BorderLayout东西南北中 {
	
	static Frame frame = new Frame(Thread.currentThread().getStackTrace()[1].getClassName());
	
	static JLabel East, West, South, North, Center;
	
	static {
		frame.addWindowListener(new WindowAdapter() {@Override public void windowClosing(WindowEvent event) {frame.dispose();System.exit(0);}});
		frame.setBounds(100, 50, 600, 480);
		
		try {
			Class<?> cl = new SecurityManager() {public Class<?> wantClass(){return getClassContext()[1];}}.wantClass();
			Field fields[] = cl.getDeclaredFields();
			for(int i=0;i<fields.length;i++) {
				Field field = fields[i];
				if(fields[i].getModifiers()==Modifier.STATIC && field.getType()==JLabel.class) {
					field.set(null, new JLabel(field.getName()));
					JLabel jlb = (JLabel)field.get(null);
					jlb.setBackground(new Color((int) (Math.random()*255*255*255))); jlb.setOpaque(true);
					jlb.setHorizontalAlignment(JLabel.CENTER); jlb.setVerticalAlignment(0);
//					jlb.setPreferredSize(new Dimension(200, 200));
					frame.add(jlb, jlb.getText());
				}
			}
			
		}catch(Exception ex) {ex.printStackTrace();}
		
	}
	
	public static  void main(String...arguments) {
		frame.setVisible(true);
	}

}

在这里插入图片描述




borderLayout.setHgap(200); borderLayout.setVgap(100);

package layout;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class BorderLayout2205271446 {
	
	static Frame frame = new Frame("BorderLayout2205271446");
	
	static BorderLayout borderLayout = (BorderLayout) frame.getLayout(); //Frame默认自带BorderLayout
	
	static JLabel jlb;

	static {
		frame.addWindowListener(new WindowAdapter() {@Override public void windowClosing(WindowEvent event) {frame.dispose();System.exit(0);}});
		frame.setBounds(new Rectangle(100, 50, 1600, 900));
		
		borderLayout.setHgap(200); borderLayout.setVgap(100);
		
		String titleAr[] = new String[] {"东" , "西" ,"南" ,"北" ,"中"};
		Color colorAr[] = new Color[] {Color.RED, Color.ORANGE, Color.yellow, Color.GREEN , Color.CYAN};
		String areaAr[] = new String[] {BorderLayout.EAST, BorderLayout.WEST, BorderLayout.SOUTH, BorderLayout.NORTH, BorderLayout.CENTER};
		Font font = new Font("宋体", Font.CENTER_BASELINE, 30);
		
		for(int i=0; i<areaAr.length; i++) {
			jlb = new JLabel(titleAr[i]); jlb.setBackground(colorAr[i]); jlb.setOpaque(true); jlb.setFont(font);
			jlb.setHorizontalAlignment(JLabel.CENTER); jlb.setVerticalAlignment(JLabel.CENTER);
			frame.add(jlb, areaAr[i]);
		}
	}
	public  static  void main(String...arguments) {frame.setVisible(true);}

}

在这里插入图片描述




东西南北中都 setPreferredSize(new Dimension(200, 200));

package layout;

import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

import javax.swing.*;

@SuppressWarnings({ "removal", "deprecation" })
public class BorderLayout东西南北中 {
	
	static Frame frame = new Frame(Thread.currentThread().getStackTrace()[1].getClassName());
	
	static JLabel East, West, South, North, Center;
	
	static {
		frame.addWindowListener(new WindowAdapter() {@Override public void windowClosing(WindowEvent event) {frame.dispose();System.exit(0);}});
		frame.setBounds(100, 50, 600, 480);
		
		try {
			Class<?> cl = new SecurityManager() {public Class<?> wantClass(){return getClassContext()[1];}}.wantClass();
			Field fields[] = cl.getDeclaredFields();
			for(int i=0;i<fields.length;i++) {
				Field field = fields[i];
				if(fields[i].getModifiers()==Modifier.STATIC && field.getType()==JLabel.class) {
					field.set(null, new JLabel(field.getName()));
					JLabel jlb = (JLabel)field.get(null);
					jlb.setBackground(new Color((int) (Math.random()*255*255*255))); jlb.setOpaque(true);
					jlb.setHorizontalAlignment(JLabel.CENTER); jlb.setVerticalAlignment(0);
					jlb.setPreferredSize(new Dimension(200, 200));
					frame.add(jlb, jlb.getText());
				}
			}
			
		}catch(Exception ex) {ex.printStackTrace();}
		
	}
	
	public static  void main(String...arguments) {
		frame.setVisible(true);
	}

}

在这里插入图片描述




同时设置 Vgap Hgap PreferredSize

package layout;

import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

import javax.swing.*;

@SuppressWarnings({ "removal", "deprecation" })
public class BorderLayout东西南北中 {
	
	static Frame frame = new Frame(Thread.currentThread().getStackTrace()[1].getClassName());
	
	static BorderLayout borderLayout = (BorderLayout) frame.getLayout(); //Frame默认自带BorderLayout
	
	static JLabel East, West, South, North, Center;
	
	static {
		frame.addWindowListener(new WindowAdapter() {@Override public void windowClosing(WindowEvent event) {frame.dispose();System.exit(0);}});
		frame.setBounds(100, 50, 600, 480);
		
		borderLayout.setHgap(20); borderLayout.setVgap(10);
		
		try {
			Class<?> cl = new SecurityManager() {public Class<?> wantClass(){return getClassContext()[1];}}.wantClass();
			Field fields[] = cl.getDeclaredFields();
			for(int i=0;i<fields.length;i++) {
				Field field = fields[i];
				if(fields[i].getModifiers()==Modifier.STATIC && field.getType()==JLabel.class) {
					field.set(null, new JLabel(field.getName()));
					JLabel jlb = (JLabel)field.get(null);
					jlb.setBackground(new Color((int) (Math.random()*255*255*255))); jlb.setOpaque(true);
					jlb.setHorizontalAlignment(JLabel.CENTER); jlb.setVerticalAlignment(0);
					jlb.setPreferredSize(new Dimension(200, 200));
					frame.add(jlb, jlb.getText());
				}
			}
			
		}catch(Exception ex) {ex.printStackTrace();}
		
	}
	
	public static  void main(String...arguments) {
		frame.setVisible(true);
	}

}

在这里插入图片描述