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);
-
子部件.setPreferredSize时, 东西width起作用,南北height起作用, center都不起作用
- 子Component的setPreferredSize(Dimension preferredSize) 在 南北 时 height起作用
- 子Component的setPreferredSize(Dimension preferredSize) 在 东西 时 width起作用
- 子Component的setPreferredSize(Dimension preferredSize) 在 中部 时 不起作用
-
Frame默认自带BorderLayout
-
JFrame的contentPane默认自带BorderLayout
-
拿布局,
JFrame的布局不能直接用getLayout()拿, 要用.getContentPane().getLayout();
Frame是用getLayout()
;直接拿 -
BorderLayout的Hgap和Vgap可用于居中_要在东西南北中都放组件时才起作用
默认样式
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);
}
}
测试 Label JLabel Button JButton 在 BorderLayout中setPreferredSize()的效果
package component;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
public class 测试SetPreferredSize在BorderLayout中有没有用2205222007 {
static void pln() {System.out.println("");}
static void pln(Object o) {System.out.println(o);}
static void pln(Object o1, Object o2) {pln(o1+" 的结果是 "+o2);}
static Frame frame = new Frame("测试SetPreferredSize在BorderLayout中有没有用2205222007");
static {
frame.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent ev) {
System.exit(0);
}
});
// frame.setPreferredSize(new Dimension(1600,800)); //无用
frame.setBounds(100,100,1600,800);
}
public static void main(String...arguments) throws Exception{
Label label = new Label("Label setPreferredSize(new Dimension(600, 0)", Label.CENTER); frame.add(label, BorderLayout.EAST);
label.setBackground(Color.blue);
label.setPreferredSize(new Dimension(600, 0));
// label.setSize(800,200); //无效
JLabel jlb010 = new JLabel("JLabel setPreferredSize(new Dimension(300,10))", JLabel.CENTER); frame.add(jlb010, BorderLayout.WEST);
jlb010.setBackground(Color.YELLOW);
jlb010.setPreferredSize(new Dimension(300,10));
jlb010.setOpaque(true);
Button button = new Button("Button setPreferredSize(new Dimension(9999,200)"); frame.add(button, "North"); button.setPreferredSize(new Dimension(9999,200));
JButton jButton = new JButton("JButton setPreferredSize(new Dimension(9999,100)"); frame.add(jButton, "South"); jButton.setPreferredSize(new Dimension(9999,100));
JButton jButton2 = new JButton("JButton setPreferredSize(new Dimension(1,1)"); frame.add(jButton2, "Center"); jButton2.setPreferredSize(new Dimension(1,1));
frame.setVisible(true);
好酒在张工("java.awt.Label");
好酒在张工("java.awt.Button");
好酒在张工("javax.swing.JLabel");
好酒在张工("javax.swing.JButton");
}
public static void 好酒在张工(String className) throws Exception{
Frame frame = (Frame)Class.forName("java.awt.Frame").getDeclaredConstructor(String.class).newInstance("测试SetPreferredSize在BorderLayout中有没有用2205222007");
frame.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent ev) {
System.exit(0);
}
});
// frame.setPreferredSize(new Dimension(1600,800)); //无用
frame.setBounds(100,100,1600,800);
String dxnbz[] = new String[] {"East" , "West" , "South" , "North" , "Center"};
for(int i=0; i<dxnbz.length; i++) {
Component component = (Component) Class.forName(className).getDeclaredConstructor(String.class).newInstance(dxnbz[i]);
switch (dxnbz[i]) {
case"East": component.setBackground(Color.RED); break;
case"West": component.setBackground(Color.ORANGE); break;
case"South": component.setBackground(Color.YELLOW); break;
case"North": component.setBackground(Color.GREEN); break;
case"Center": component.setBackground(Color.CYAN); break;
}
component.setPreferredSize(new Dimension(300,200));
pln("查看默认的isOpaque() ,Component的false表示为轻量级组件, JComponent的true为不透明,看得到background, component.getClass()="+component.getClass()+" component.isOpaque()==", component.isOpaque());
if(component.getClass()==JLabel.class) {
JLabel jlb = (JLabel)component;
jlb.setOpaque(true); // JLabel默认的opaque是false, 看不到background;
pln("jlb.setOpaque(true);后, jlb.isOpaque()=", jlb.isOpaque());
}
frame.add(component, dxnbz[i]);
}
frame.setVisible(true);
}
}
都是东西width起作用,南北height起作用, center都不起作用
BorderLayout的Hgap和Vgap可用于居中_要在东西南北中都放组件时才起作用
package borderlayout;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
public class BorderLayout的Hgap和Vgap可用于居中_要在东西南北中都放组件时才起作用_JFrameJPanel演示 {
public static void main(String...arguments)throws Exception{
JFrame frame = new JFrame(Thread.currentThread().getStackTrace()[1].getClassName());
frame.addWindowListener(new WindowAdapter() {
@Override public void windowClosing(WindowEvent ev) {System.exit(0);}
});
JButton jbt = new JButton("""
<html><head><style>
body{font-size:14px; }
</style></head><body>
<h1>JButton</h1>
<div>BorderLayout的Hgap和Vgap, 要在东西南北中都放组件时才起作用</div>
<div>BorderLayout的Hgap和Vgap可以用来调整大小和居中CENTER中的组件</div>
<div>东西南北默认有大小, 可用 setPreferredSize(new Dimension(0,0)) 将尺寸设为0</div>
</body></html>
""");
frame.add(jbt); jbt.setDoubleBuffered(true);
BorderLayout borderLayout = (BorderLayout) frame.getContentPane().getLayout();
borderLayout.setVgap(300); borderLayout.setHgap(500); //>BorderLayout的Hgap和Vgap, 要在东西南北中都放组件时才起作用
Component eastC = new JPanel(); //eastC.setPreferredSize(new Dimension(0, 450)); //南北宽度起作用
eastC.setBackground(Color.blue);
frame.add(eastC, BorderLayout.EAST);
frame.add(new JPanel(), BorderLayout.WEST);
frame.add(new JPanel(), BorderLayout.SOUTH);
frame.add(new JPanel(), BorderLayout.NORTH);
frame.setBounds(100, 100, 1600, 900);
frame.setVisible(true);
}
}
拿, 要 .getContentPane().getLayout();
Frame是直接拿 getLayout()
;
package borderlayout;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
public class BorderLayout的Hgap和Vgap可用于居中_要在东西南北中都放组件时才起作用_FramePanel演示 {
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 ev) {System.exit(0);}
});
JButton jbt = new JButton("""
<html><head><style>
body{font-size:14px; }
</style></head><body>
<h1>JButto</h1>
<div>BorderLayout的Hgap和Vgap, 要在东西南北中都放组件时才起作用</div>
<div>BorderLayout的Hgap和Vgap可以用来调整大小和居中CENTER中的组件</div>
<div>东西南北默认有大小, 可用 setPreferredSize(new Dimension(0,0)) 将尺寸设为0</div>
</body></html>
""");
frame.add(jbt); jbt.setDoubleBuffered(true);
BorderLayout borderLayout = (BorderLayout) frame.getLayout();
borderLayout.setVgap(300); borderLayout.setHgap(500); //>BorderLayout的Hgap和Vgap, 要在东西南北中都放组件时才起作用
Component eastC = new Panel(); //eastC.setPreferredSize(new Dimension(0, 450)); //南北宽度起作用
eastC.setBackground(Color.blue);
frame.add(eastC, BorderLayout.EAST);
frame.add(new Panel(), BorderLayout.WEST);
frame.add(new Panel(), BorderLayout.SOUTH);
frame.add(new Panel(), BorderLayout.NORTH);
frame.setBounds(100, 100, 1600, 900);
frame.setVisible(true);
}
}