浅析Java中的图像化界面----Awt与Swing

本文深入探讨了Java中的图像化界面,主要关注Awt和Swing的区别和使用。Awt是重量级组件,依赖本地操作系统,而Swing是轻量级的,提供了更丰富的界面和更好的平台一致性。文章讲解了组件、布局管理器和事件监听的基本概念,如FlowLayout、BorderLayout和GridLayout,以及事件与线程的交互。此外,还列举了常用组件,如标签、按钮、文本框和滚动条,并介绍了如何在Swing中处理事件和实现线程安全的GUI编程。
摘要由CSDN通过智能技术生成

Java中的图像化界面----Awt与Swing

GUI全称Graphical User Interfaces(图形用户户界面),又称为图形用户接口。GUI指的就是采用图形方式显示的计算机操作用户界面,所谓的用户界面通俗的来讲也就是在桌面上我们看到的小型窗口。

微信聊天窗口就是一个用户图形化界面,但是现在大多数的用户图形化界面并不使用Java语言来实现,虽然Java可以实现图像化界面,但是由于其整体美感较差,而且使用效率相比其他语言要低,它并是实现图形化界面的最优解,因此使用较少。

Java中的GUI主要通过java.awt和javax.swing来进行实现。

  • AWT:abstract window toolkit(抽象窗口工具集),它是一种重量级组件,比较依赖于本地操作系统的GUI,缺乏平台独立性。但是其中组件较稳稳定,兼容每一个JDK版本。java.awt中的类负责于本地操作系统进行交互,让本地操作系统显示和操作组件,因此所有的组件都是以Java.awt为基类。

  • Swing:无缩写,本意为摆渡,摆动,意味这人机之间的交互过度。自JDK1.2版本进行引入,是对AWT组建的一个拓展,功能更强,界面更丰富,各种平台上更统一,它是轻量级的(lightweight,即all-Java language) 。


一、浅析Java Awt、Java Swing

实现GUI编程三个必不可少的要素:组件、布局管理、事件。通过这三个方面来浅析Java awt如何实现的GUI编程

设计和实现用户图形化界面可以分解为三个步骤:

  • 创建组件:创建组成界面的各种元素,如:文本框、按钮、窗口(frame)等。
  • 指定布局:根据具体需要设置它们的排列位置,三种布局管理方式(流式布局、网格布局、边界布局方式) 。
  • 相应事件:定义图形用户界面的事件和各界面元素对不同事件的响应, 从而实现图形用户界面与用户的交互功能。

 1、组件

Java中构成图像用户界面的各种元素,称之为组件。组件分为容器类组件和非容器类组件。容器有被分为顶级容器和非顶级容器。

一般来说Java中的所有组件的基类都是java.component,又有容器的基类一般都是container中。Component类是所有组件和容器的抽象父类,其中定义了一些每个容器和组件都可能用到的方法。

Java中组件分为:普通组件、容器(顶级容器、普通容器)。每个容器都具有add方法,这个add方法在container基类中实现,每个继承此类的子类容器都具有添加组件的能力,且组件必须通过添加到容器中方能正常显示。

组件基本应用(包含画笔的使用)

  • 两个顶级容器的应用:Frame(窗口)、Dialog(弹窗)   
import java.awt.Button;
import java.awt.Color;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test{
	public static void main(String[] args) {
		Myframe frame = new Myframe();
		frame.init();
		frame.compen();
	}
}
//创建一个桌面窗口,并在窗口中添加一个按钮组件
class Myframe extends Frame{
	private static final long serialVersionUID = -3005332394925719672L;
	public Myframe() {
		super("测试窗口");
	}
	//通过设置初始化函数来对此窗口进行初始化
	public void init() {
		super.setVisible(true);
		super.setBounds(200, 200, 200, 200);
		//为窗口添加事件,进行关闭操作
		this.addWindowListener(new WindowAdapter() {
		@Override
		public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}
	//为此窗口添加一个组件---按钮组件
	public void compen() {
		Button button = new Button("按钮");
		button.setSize(100, 100);
		//设置组件的布局方式
		this.setLayout(null);;
		this.add(button);
		//为按钮主键添加侦听器---侦听器通过内部类实现---接口、继承
		button.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				//当侦听到事件后,响应此继承的方法,并执行方法中的语句
				//事件产生后,重新创建一个弹窗对象进行显示
				end();
			}
		});
	}
	public void end() {
		new Mydialog(this,"测试弹窗").increase();
	}
	
}

//创建一个弹窗通过监听弹出
class Mydialog extends Dialog{
	private static final long serialVersionUID = 1L;
/**
 * 添加构造函数,直接通过构造函数对弹窗进行初始化
 */
	public Mydialog(Frame owner,String title) {
		super(owner,title);
		setVisible(true);//方法继承自window类,往往用于顶级窗口,设置窗口是否可见
		setSize(100, 200);//继承自window类,用于设置组件的大小
		/*
		 * 继承自window类,用于设置窗口的背景颜色,
		 * 其需要传入color类对象可以使用color类中的类变量。
		 */
		setBackground(Color.BLUE);
		setLocation(200, 300);//继承自window类,移动组件到指定位置,也就是将组件放到指定位置。以物理机左上角作为原点。
		/*setBounds(x, y, width, height);
		 * 继承自window类,用于移动组件到指定位置,并设定组件的大小。
		 */
		//为窗口添加事件,进行关闭操作,
//这种内部类不去实现一个接口而是去继承一个类,而这个类实现类所有方法,但是方法体为空,便于以后
//进行使用,这种模式方法叫做适配器模式,大大降低了无效代码的使用。
		this.addWindowListener(new WindowAdapter() {
			//当事件产生后,系统构造出内部类对象,通过此对象调用,复写的方法
			//其中复写中方法中的参数,通过系统产生传入,
			@Override
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}
	//向此容器中添加组件---文本框
	public void increase() {
		Label label = new Label("这是一个文本框",1);
		this.add(label);
	}
}

测试效果图:

  • 画笔的使用 
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestGraphics{
	/**
	 * 画笔,此paint()方法以及画笔对象由系统自动产生,进行自动传参,
	*当此类继承frame并对paint进行重写后,与此同时这个对象被监听,一旦监听到对象被创建,
	*此时,系统将自动调用paint()方法,并创建一个画笔参数传参给他。
	*通过此画笔对象调用相应方法,时Java底层进行的回调操作。
	*/
	public static void main(String[] args) {
		new MyPaint().MyFrame();
	}
}
class MyPaint extends Frame{
	private static final long serialVersionUID = 1L;
	/*
	 * 初始化窗口---对窗口设置可视性、设置窗口侦听器(设置关闭按钮),设置窗口的绝对大小和绝对位置。
	 */
	public void MyFrame() {
		setBounds(100, 100, 300, 300);
		setVisible(true);
		addWindowListener(new WindowAdapter() {
			@Override
			public void windowClosing(WindowEvent e) {
					System.exit(0);
			}
		});
	}
	/**
	 * 此paint()方法,继承自window类,一般被其子类frame、dialog进行实现,并仅仅在此两个窗口上进行绘制。
	 * 当这些子类对象窗口创建,并进行复写方法,系统会自动创建一个画笔,并在此容器组件上进行绘制图形。
	 * 当组件中的绘图更新时,也可以通过component类中的repaint()进行对组件重画更新界面。
	 */
	@Override
	public void paint(Graphics g) {
//		super.print(g);//调用父类的paint()
		//为画笔设置颜色
		g.setColor(Color.BLUE);
		g.drawOval(80, 50, 200, 80);
	}
}

   

2、布局管理器 

eclipse中可以通过安装windowbuilder插件,可以New—Other—Windows Builder —Swing Designer—Jframe,其顶部可切换source/design模式,通过design进行可视化布局。

        java.awt包中定义了多种布局管理器,这里我们了解五种布局管理器。

  • 常用的三种布局管理器、两种非常用布局管理器(CardLayout,
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值