黑马程序员-javaGUI编程

本文详细介绍了Java GUI编程中的AWT和Swing框架,包括组件布局管理器、事件监听机制及基本操作,同时展示了如何使用ActionListener、WindowListener处理用户交互事件。

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

------- android培训java培训、期待与您交流! ----------

GUI编程
1.AWT简介
Abstract Window Tookit(抽象窗口工具包),需要调用本地系统实现功能,属于重量级控件是sun公司发布jdk1.0时的一个重要组成部分
2.Swing简介
不同于awt中大量引用windows函数在java中提供了一种轻量型组件--swing,swing是使用java语言实现,在awt基础上建立的一套图形界面系统,不依赖平台,争强了移植性

awt中的继承关系图

Component

         |----------Button

         |----------Label

         |----------CheckBox

         |----------TextComponent

                                    |----------TextArea

                                    |----------TextField

         |----------Container

                               |----------Panel

                               |----------Window

                                                    |----------Frame

                                                    |----------Dialog

                                                                        |----------FileDialog

3.初识布局管理器
在java中专门提供了布局管理器来管理组件,通过布局管理器可以使用不同的方式进行排列组件。
常见的布局管理器有
1.FlowLayout (流水线式布局管理器)
--从左到右布局排列
--Panel 默认布局管理器
2.BorderLayout (边界布局管理器)
--东,南,西,北,中
--Frame 默认布局管理器
3.GridLayout (网格式布局管理器)
--规则的矩阵
4.CardLayout (选项卡布局管理器)
--选项卡
5.GridBagLayout (网格包布局管理器)
--非规则的矩阵
下面是简单的GUI程序

实例1

import java.awt.*;
import java.awt.Color;
public class DemoAction {

	public static void main(String[] args) {
		Frame f = new Frame("第一个窗体 ");
		f.setLayout(new FlowLayout());		//重新设定布局管理器
		Label l = new Label("标签");
		f.setVisible(true);		//设置组件显示
		f.setSize(1366, 768);	//设置组件的长和宽
		f.setLocation(1001, 100);	//设置组件的显示位置
		f.setBackground(Color.BLUE);	//设置组件的背景颜色
		Button b = new Button("我是一个按钮");
		//f.setResizable(false);		//让组件没办法重新设置大小
		f.add(b);
		f.add(l);
		//f.pack();
	}

}

Frame 的窗体事件监听机制,尝试使用窗体上的x键关闭窗体
1.创建一个监听器的类
2.将该监听器注册到指定的对象中去
接下来介绍一个接口和一个类, WindowListener 是专门处理事件的监听接口,一个窗体的所有变化都可以使用这个监听器进行监听,另一个类是 WindowAdapter 这个类,该类实现了WindowListener
这个接口,并复写了其中的所有方法,但该类还是用 abstract 修饰了,说明该类是一个抽象类,该类不可以创建对象,只能被其他的类继承,当只需要对窗体的某个事件进行监听的话,
建议继承 WindowAdapter 之后直接覆写其中你需要监听的方法即可(如果实现 WindowListener 接口就要覆写所有的方法),看如下代码
实例2

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestWindowEventDemo {

	public static void main(String[] args) {
		Frame f = new Frame("监听窗体事件");
		f.setSize(300, 300);	//设置窗体大小
		f.setLocation(200, 200);	//设置窗体的位置
		f.setVisible(true);		//设置窗体可见
		f.addWindowListener(/*new TestWindowEventDemo().new MyMonitor()*/new WindowAdapter(){
			public void windowClosing(WindowEvent e) {		//也可以使用匿名内部类
				System.exit(0);
			}
		});
		
	}
	class MyMonitor extends WindowAdapter {		//使用内部内定义监听器

		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}
		
	} 
}

ActionListener 的简单使用
实例3

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestActionEventDemo {

	public static void main(String[] args) {
		Frame f = new Frame("1号窗口");
		f.setBounds(100, 100, 300, 300);	//设置大小和位置
		f.setVisible(true);
		f.setResizable(false);	//设置大小不可变
		f.setLayout(new BorderLayout());
		Button b1 = new Button("打开二号窗口");
		Button b2 = new Button("关闭所有窗口");
		b2.addActionListener(new ActionListener() {			
				public void actionPerformed(ActionEvent e) {
					System.exit(0);		//退出java虚拟机
				}
		});
		b1.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				Frame f = new Frame("2号窗口");
				f.setVisible(true);
				f.setResizable(false);	//设置大小不可变
				f.setBounds(300, 300, 300, 300);
			}
		});
		f.add(b1, BorderLayout.WEST);	//将控件添加到指定的位置
		f.add(b2, BorderLayout.EAST);
	}
}

鼠标事件和键盘事件的触发,这些事件处理都大同小异的,废话不多说,直接看例子
实例4

import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MouseEventDemo {

	public static void main(String[] args) {
		Frame f = new Frame("鼠标测试");
		f.setVisible(true);
		f.setBounds(100, 100, 300, 300);
		Button b = new Button("我是按钮");
		b.addMouseListener(new MouseAdapter() {

			
			public void mouseClicked(MouseEvent e) {
				System.out.println("单击了鼠标");
				if(e.getButton() == MouseEvent.BUTTON1) {
					System.out.println("按下了鼠标左键");
					System.out.println(e.getXOnScreen() + "   " + e.getYOnScreen());
				} else if(e.getButton() == MouseEvent.BUTTON2) {
					System.out.println("按下了鼠标中键");
					System.out.println(e.getXOnScreen() + "   " + e.getYOnScreen());
				} else if(e.getButton() == MouseEvent.BUTTON3) {
					System.out.println("按下了鼠标右键");
					System.out.println(e.getXOnScreen() + "   " + e.getYOnScreen());
				}
			}

		
/*			public void mousePressed(MouseEvent e) {
				System.out.println("按下了鼠标");
			}

			
			public void mouseReleased(MouseEvent e) {
				System.out.println("释放了鼠标");
			}

			
			public void mouseEntered(MouseEvent e) {
				System.out.println("鼠标进入了指定区域");
			}

			public void mouseExited(MouseEvent e) {
				System.out.println("鼠标离开了指定区域");
			}*/
			
		});
		f.add(b);
		//f.pack();
	}

}

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class KeyEventDemo {

	public static void main(String[] args) {
		Frame f = new Frame("键盘事件");
		f.setBounds(100, 100, 400, 400);
		f.setVisible(true);
		Button b = new Button("关闭程序");
		b.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				System.exit(0);
				
			}
		});
		TextField tf = new TextField(10);
		tf.addKeyListener(new KeyAdapter() {

			public void keyPressed(KeyEvent e) {
				if(!(e.getKeyCode() >= KeyEvent.VK_0 && e.getKeyCode() <= KeyEvent.VK_9) ||e.isShiftDown()) {
					//System.out.println("-----------");
					e.consume();
				}
			}
			
		});
		f.setLayout(new GridLayout(1, 2));
		f.add(tf);
		f.add(b);
		f.pack();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值