Java学习 -- GUI

本文深入探讨Java图形用户界面(GUI)布局管理器的种类与使用,包括FlowLayout、BorderLayout和GridLayout的特点及应用实例,帮助读者掌握不同场景下的布局策略。

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

组件

  • 组件(Component)是图形用户界面的基本组成元素,凡是能够以图形化方式显示在屏幕上并能够与用户进行交互的对象均为组件,如菜单、按钮、标签、文本框、滚动条等。
  • 组件分类
    1. java.awt.Component
    2. java.awt.MenuComponent
    3. 说明:抽象类java.awt.Component是除菜单相关组件之外所有Java AWT组件类的跟父类,该类规定了GUI组件的基本特性,如尺寸、位置和颜色效果等,并实现了作为一个GUI部件所应具备的基本功能。

容器

  • 组件通常不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。
  • 有一类特殊的组件是专门用来包含其他组件的,该类组件叫做容器,java.awt.Container是所有容器的父类,java.awt.Container继承自java.awt.Component
  • 容器类对象本身也是一个组件,具有组件的所有性质,但反过来组件却不一定是容器
    在这里插入图片描述
import java.awt.*;
public class TestFramel {
	public static void main(String[] args) {
		Frame f = new Frame("daling");
		Button btn = new Button("dali");
		f.add(btn);
		f.setSize(200, 200);
		f.setLocation(50, 300);
		f.setBackground(Color.RED);
		f.setVisible(true);
	}
}

Frame 常用的方法

  • public void setBounds(int x, int y, int width, int height)
    设置窗体位置和大小,x和y表示窗体左上角距离屏幕的水平和垂直距离,width和height是窗体本身的宽度和高度
  • public void setSize(int width, int height)
    设置窗体的大小,width和height是窗体本身的宽度和高度
  • public void setVisible(boolean flag)
    设置窗体是否可见,true表示可见,false表示不可见
  • public void set setBackground(Color c)
    设置窗体的背景色
import java.awt.*;

class MyFrame extends Frame {
	public static int id = 0;
	MyFrame(int x, int y, int w, int h, Color color) {
		super("MyFrame " + (++id));
		setBackground(color);
		setLayout(null);
		setBounds(x, y, w, h);
		setVisible(true);
	}
}
public class TestFrame {
	public static void main(String[] args) {
		MyFrame f1 = new MyFrame(100, 100, 200, 200, Color.BLUE);
		MyFrame f2 = new MyFrame(300, 100, 200, 200, Color.YELLOW);
		MyFrame f3 = new MyFrame(100, 300, 200, 200, Color.GREEN);
		MyFrame f4 = new MyFrame(300, 300, 200, 200, Color.MAGENTA);
	}
}

Panel

  • panel 是容纳其他组件的组件
  • panel是容器
  • panel不能单独存在,必须得被添加到其他容器中
  1. panel类拥有从其父类继承来的
    public void setBounds(int x, int y, int width, int height)
    public void setSize(int width, int height)
    public void setVisible(boolean flag)
    public void set setBackground(Color c)
    setLayout(LayoutManager mgr)等方法
  2. Panel的构造方法为:
    Panel()使用默认的FlowLayout类布局管理器初始化
    Panel(LayoutManager layout)使用指定布局管理器初始化
import java.awt.*;

public class TestPanel {
	public static void main(String[] args) {
		Frame f = new Frame("Java Frame with Panel");
		Panel p = new Panel();
		f.setLayout(null);
		f.setBounds(300, 300, 500, 500);
		f.setBackground(new Color(100, 100, 102));
		p.setBounds(150, 150, 250, 250); // p 相对于 f 的位置
		p.setBackground(new Color(204, 204, 255));
		f.add(p);
		f.setVisible(true);
	}
}

布局管理器

  • 容器对其中所包含组件的排列方式,包括组件的位置和大小设定,被称为容器的布局(Layout)
  • 为了使图形用户界面具有良好的平台无关性,Java语言提供了布局管理器来管理容器的布局,而不建议直接设置组件在容器中的位置和尺寸
  • 每个容器都有一个默认的布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会自动调用其对应的布局管理器
  • 在AWT中,常见的布局管理器
    (1)BorderLayout
    (2)FlowLayout
    (3)GridLayout
FlowLayout布局管理器
  • FlowFlayout是Panel类的默认布局管理器
    (1)FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。
    (2)不改变组件的大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。
  • FlowLayout布局管理器默认的对齐方式是居中
  • new FlowLayout(FlowLayout.RIGHT, 20, 40);
    • 右对齐,组件之间水平间距20个像素,垂直间距40个像素
  • new FlowLayout(FlowLayout.LEFT);
    • 左对齐,水平和垂直间距为缺省值(5)
  • new FlowLayout();
    • 使用缺省的居中对齐方式,水平和垂直间距为缺省值(5)
import java.awt.*;

public class TestFlowLayout {
	public static void main(String[] args) {
		Frame f = new Frame("Flow Layout");
		Button btn1 = new Button("Ok");
		Button btn2 = new Button("Open");
		Button btn3 = new Button("Close");
		f.setLayout(new FlowLayout(FlowLayout.CENTER)); // 居中对齐方式
		f.add(btn1);
		f.add(btn2);
		f.add(btn3);
		f.setSize(300, 400);
		f.setVisible(true);
	}
}
BorderLayout布局管理器
  • BorderLayout是Frame类的默认布局管理器
  • BorderLayout将整个容器的布局划分成:东、西、南、北、中五个区域,组件只能被添加到指定的区域
  • 如果不指定组件加入部位,则默认加入到CENTER区
  • 每个区域只能加入一个组件,如果加入多个,则先前加入的会被覆盖
  • BorderLayout型布局管理器尺寸缩放原则:
    (1)北、南两个区域在水平方向缩放
    (2)东、西两个区域在垂直方向缩放
    (3)中部可在两个方向上缩放
import java.awt.*;

public class TestBorderLayout {
	public static void main(String[] args) {
		Frame f;
		f = new Frame("Border Layout");
		Button bn = new Button("BN");
		Button bs = new Button("BS");
		Button bw = new Button("BW");
		Button be = new Button("BE");
		Button bc = new Button("BC");
/*
		f.add(bn, "North");
		f.add(bs, "South");
		f.add(bw, "West");
		f.add(be, "East");
		f.add(bc, "Center");
*/
		f.add(bn, BorderLayout.NORTH);
		f.add(bs, BorderLayout.SOUTH);
		f.add(bw, BorderLayout.WEST);
		f.add(be, BorderLayout.EAST);
		f.add(bc, BorderLayout.CENTER);

		f.setSize(200, 200);
		f.setVisible(true);
	}
}
GridLayout布局管理器
  • GridLayout型布局管理器将空间划分成规则的矩形网格,每个单元各区域大小相等。组件被添加到每个单元格中,先从左到右填满一行后换行,再从上到下。
  • 在 GridLayout 构造方法中指定分割的行数和列数:
    (1)如:GridLayout(3,4)
    (2)GridLayout 是以行数为准的
import java.awt.*;

public class TestGridLayout {
	public static void main(String[] args) {
		Frame f = new Frame("Grid Layout");
		
		Button btn1 = new Button("btn1");
		Button btn2 = new Button("btn2");
		Button btn3 = new Button("btn3");
		Button btn4 = new Button("btn4");
		Button btn5 = new Button("btn5");
		// Button btn6 = new Button("btn6");

		f.setLayout(new GridLayout(2, 10));
		f.add(btn1);
		f.add(btn2);
		f.add(btn3);
		f.add(btn4);
		f.add(btn5);
		// f.add(btn6);
		f.pack(); // 如果注释本行,则输出结果就变成了一个只有标题的窗口
		f.setVisible(true);
	}
}

布局管理器总结

  • Frame是一个顶级窗口,Frame的缺省布局管理器为BorderLayout
  • Panel无法单独显示,必须添加到某个容器中,缺省布局管理器为FlowLayout
  • 当把Panel作为一个组件添加到某个容器中后,该Panel依然可以有自己的布局管理器
  • 使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属性,如果试图使用java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖
  • 如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值