文章目录
AWT
1. 概述
1.1 GUI
图形用户界面(Graphics User Interface, GUI)是指为程序提供直观的图形界面,最终用户通过鼠标拖动、单击等动作就可以操作的整个应用;
1.2 AWT
抽象窗口工具集(Abstract Windows Toolkit,AWT)是最原始的Java GUI工具包;提供了一些基本的功能;
1.2.1 优点
- AWT在Java的每个版本都成为了一种标准配置,意味着我们不需要单独安装这个工具包,在任何一个Java运行环境中都可以使用它;
- 非常稳定;
- 简单、高效;
- 运行速度快;
1.2.2 缺点
- 消耗资源;
- 难以跨平台;
2. 功能
2.1 容器
任何窗口都可以被分解成一个空的容器,容器里边盛装了大量的基本组件,通过设置这些基本组件的大小,位置等属性,就可以将该容器和基本的组件组成一个整体的窗口;
2.1.1 窗口(Frame)
Frame代表常见的窗口,它是Window类的子类
- 通过Frame创建一个窗口:
import java.awt.Color;
import java.awt.Frame;
/*
通过Frame创建一个窗口
*/
public class Demo01Frame {
public static void main(String[] args) {
//创建窗口对象
Frame frame = new Frame("我的第一个Java图像界面窗口");
//设置窗口大小
frame.setSize(400, 400);
//设置窗口弹出的初始位置
frame.setLocation(200, 200);
/*
//上述两个功能可以用一个功能代替
frame.setBounds(200, 200, 400, 400);
*/
//设置背景颜色
frame.setBackground(Color.PINK);
//设置大小固定,不可更改
frame.setResizable(false);
//设置可见性,
frame.setVisible(true);
}
}
-
结果:
-
分析:
此例子只是生成了一个窗口,并不能响应用户的操作,即使单击窗口右上方的关闭按钮,也是不可以关闭窗口大的,实现关闭的代码,在之后的内容将会涉及;
2.1.2 面板(Panel)
与Frame不同的是,Panel不能作为最外层的容器单独存在,它首先必须作为一个组件放在其他容器中,然后再把它当做容器,把其他组件放在它里面;
-
通过Panel来解决关闭事件;
import java.awt.Color; import java.awt.Frame; import java.awt.Panel; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /* 通过Panel来解决关闭事件; */ public class Demo02Panel { public static void main(String[] args) { //创建窗口对象 Frame frame = new Frame(); //创建一个Panel容器,来实现事件监听 Panel panel = new Panel(); //设置布局 /* 此处为什么要有这个语句?具体原因我也不是很清楚,查了资料之后,我是这样理解的 Frame实现布局的默认是BorderLayout(之后会讲),而Panel实现布局默认的是FlowLayout; 如果不将Frame布局取消,那么Panel作为组件就会被使用默认布局来布局,就算设置了Panel的初始位置,也没有用; */ frame.setLayout(null); //frame属性设置 frame.setBounds(200,200,400,400); frame.setBackground(Color.WHITE); //Panel属性设置:相对于frame panel.setBounds(50,50,300,300); panel.setBackground(Color.PINK); //因为Panel不可单独存在,故而需要将其加入frame窗口 frame.add(panel); //可视化 frame.setVisible(true); //监听事件,监听窗口关闭事件 //适配器模式 frame.addWindowListener(new WindowAdapter() { //窗口点击关闭时需要做的事 @Override public void windowClosing(WindowEvent e) { //结束程序 System.exit(0); } }); } }
-
结果:
-
不加取消布局:
-
加取消布局:frame.setLayout(null);
-
2.2布局管理器
2.2.1 概述
java的awt包中定义了许多GUI组件,如按钮、标签、文本框等,这些组件一般放在Frame、Panel容器中进行管理。容器中的组件大小、位置、排列方式等属性统称为容器的布局。在java中提供了布局管理器对容器中的布局进行管理;
2.2.2 分类
常见的布局管理器及其显示特性如下表:
每个容器都有一个默认的布局管理器:
- Frame、Window、Dialog默认为:BorderLayout;
- Panel、Applet默认为:FlowLayout;
注:容器的布局管理器必须在添加任何组件之前添加;
-
FlowLayout(流式布局):
流式布局是最简单的布局管理器,组件按照添加的顺序,从左到右排列,一行排满之后,重新开始下一行;用户无法手动换行;
- FlowLayout中定义的对齐方式:
//一般默认是居中对齐
FlowLayout.LEFT //左对齐
FlowLayout.RIGHT //右对齐
FlowLayout.CENTER //居中对齐
- 构造方法:
FlowLayout();
FlowLayout(int align); //对齐方式
FlowLayout(int align, int hgap, int vgap);//对齐方式,横向间距,纵向间距
- 例子:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
流式布局
*/
public class Demo03FlowLayout {
public static void main(String[] args) {
//创建窗口对象
Frame frame = new Frame("流式布局");
//组件--按钮
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
//设置为流式布局
frame.setLayout(new FlowLayout());
// frame.setLayout(new FlowLayout(FlowLayout.LEFT));
// frame.setLayout(new FlowLayout(FlowLayout.CENTER));
// frame.setLayout(new FlowLayout(FlowLayout.RIGHT));
//窗口属性设置
frame.setBounds(200, 200, 400, 400);
//将按钮作为组件添加到窗口
frame.add(button1);
frame.add(button2);
frame.add(button3);
//窗口可视化
frame.setVisible(true);
//窗口关闭
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
- 结果演示:
- BorderLayout(分区布局管理器 / 东西南北中):
- 分区布局管理器将整个容器划分为东、西、南、北、中五个区域,组件只能添加到指定的区域中;
- 如果不指定区域,默认将添加到center区域;
- 一个区域只能添加一个组件,如果往一个区域中添加多个组件,则先前添加的组件将会被遗弃;
- 如果确实想在一个区域中添加多个组件,则可以将组件添加到一个容器中,然后把该容器添加到该区域;
- 组件的尺寸被容器强行控制,与其所在的区域的尺寸相同;
- 当容器的尺寸发生变化时,BorderLayout各个区域的尺寸也会发生变化,原则为:
- 北、南只能水平方向缩放;
- 东、西只能在垂直方向缩放;
- 中间区域在水平、垂直方向都可以缩放;
- BorderLayout中区域相关的常量:
BorderLayout.NORTH 北
BorderLayout.SOUTH 南
BorderLayout.EAST 东
BorderLayout.WEST 西
BorderLayout.CENTER 中
- 例子:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
/*
东西南北中布局
*/
public class Demo04BorderLayout {
public static void main(String[] args) {
//创建窗口对象
Frame frame = new Frame("东西南北中布局");
//组件--按钮
Button east = new Button("EAST");
Button west = new Button("WEST");
Button north = new Button("NORTH");
Button south = new Button("SOUTH");
Button center = new Button("CENTER");
//添加组件
frame.add(east, BorderLayout.EAST);
frame.add(west, BorderLayout.WEST);
frame.add(south, BorderLayout.SOUTH);
frame.add(north, BorderLayout.NORTH);
frame.add(center, BorderLayout.CENTER);
//设置窗口属性
frame.setBounds(200, 200, 400, 400);
frame.setBackground(Color.PINK);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
- 结果演示:
- GridLayout(网格布局):
- 网格布局将容器分为规则的M*N个巨型区域,每个区域大小相等;
- 组件加入到每个矩形的单元格中,按其加入顺序从左到右填满一行后换行;
- 组件的大小被网格布局强行控制,受单元格大小的限制;
- 当容器的尺寸发生 变化时,组件的相对位置保持不变,但大小随容器自动变化;
- 当组件个数超过网格个数时,布局管理器自动增加网格个数,原则是保持行数不变;
- GridLayout构造方法:
GridLayout(int m, int n); //网格的行数、列数
GridLayout(int m, int n, int hgap, int vgap); //网格的行数、列数、横向间距、纵向间距
- 例子:
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
网格布局
*/
public class Demo05GridLayout {
public static void main(String[] args) {
//创建窗口对象
Frame frame = new Frame("网格布局");
//组件--按钮
Button button1 = new Button("button1");
Button button2 = new Button("button2");
Button button3 = new Button("button3");
Button button4 = new Button("button4");
Button button5 = new Button("button5");
Button button6 = new Button("button6");
//设置布局格式
frame.setLayout(new GridLayout(2, 3, 10, 10));
//添加组件
frame.add(button1);
frame.add(button2);
frame.add(button3);
frame.add(button4);
frame.add(button5);
frame.add(button6);
//设置窗口属性
frame.setBounds(200, 200, 400, 400);
frame.setBackground(Color.PINK);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
- 结果演示:
-
布局管理器练习:
实现如下布局:
分析:
- 1个frame
- 4个面板 border
- 左:button; 中:面板; 右:button
package com.sd.day22; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; //Panel 可以看成是一个空间,但是不能单独存在 public class Demo06Ex { public static void main(String[] args) { //创建一个窗口对象 Frame frame = new Frame("案例窗口"); //设置窗口布局 frame.setLayout(new GridLayout(2, 1)); //创建四个面板 Panel panel1 = new Panel(new BorderLayout()); Panel panel2 = new Panel(new GridLayout(2, 1)); Panel panel3 = new Panel(new BorderLayout()); Panel panel4 = new Panel(new GridLayout(2, 2)); //上: panel1.add(new Button("Button"), BorderLayout.EAST); panel1.add(new Button("Button"), BorderLayout.WEST); panel2.add(new Button("Button")); panel2.add(new Button("Button")); panel1.add(panel2, BorderLayout.CENTER); //下: panel3.add(new Button("Button"), BorderLayout.EAST); panel3.add(new Button("Button"), BorderLayout.WEST); //中: for (int i = 0; i < 4; i++) { panel4.add(new Button("Button")); } panel3.add(panel4, BorderLayout.CENTER); //将panel添加到frame frame.add(panel1); frame.add(panel3); //frame属性设置: frame.setBounds(200, 200, 400, 400); frame.setBackground(Color.PINK); frame.setVisible(true); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } }
- 结果演示:
2.3 事件监听
- 事件:用户在界面上的某一操作,通常使用各种输入设备,如鼠标、键盘等;
- 事件源:产生事件的组件,例如在一个按钮上的单击就是事件源;
- 监听器:包含事件处理器,负责检查事件是发生,若发生则激活事件处理器对其处理;
2.3.1 按钮监听
addActionListener(); //当用户在此按钮上按下或释放鼠标时,发生动作事件;
- 单按钮,监听一个事件
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
单按钮,监听一个事件
*/
public class Demo07ButttonActionEvent {
public static void main(String[] args) {
//创建窗口对象
Frame frame = new Frame("按钮监听");
//创建按钮对象
Button button = new Button();
//创建监听事件对象
MyActionListener myActionListener = new MyActionListener();
button.addActionListener(myActionListener);
frame.add(button);
frame.pack();
//frame属性设置:
frame.setBounds(200, 200, 400, 400);
frame.setBackground(Color.PINK);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//事件监听
class MyActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("按钮监听事件");
}
}
- 结果演示:当在白色区域(button)单击后,就会显示出现在正在做的事;
-
双按钮,监听同一件事;
getActionCommand() //获得按钮的信息
import java.awt.Button; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.LayoutManager; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /* 两个按钮,实现偶同一监听事件 */ public class Demo08TwoButtonActionEvent { public static void main(String[] args) { //创建窗口对象 Frame frame = new Frame("开始---停止"); //设置布局 frame.setLayout(new FlowLayout(FlowLayout.CENTER)); //创建按钮对象 Button startButton = new Button("start"); Button endButton = new Button("end"); //可以多个按钮只写一个监听类 endButton.setActionCommand("endButton---stop"); //创建监视对象 MyMonitor myMonitor = new MyMonitor(); startButton.addActionListener(myMonitor); endButton.addActionListener(myMonitor); //添加按钮 frame.add(startButton); frame.add(endButton); //frame属性设置: frame.setBounds(200, 200, 400, 400); frame.setBackground(Color.PINK); frame.setVisible(true); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } } //监听事件 class MyMonitor implements ActionListener { @Override public void actionPerformed(ActionEvent e) { System.out.println("按钮被点击了:msg =>" + e.getActionCommand()); if (e.getActionCommand().equals("start")) { } } }
- 结果演示:
2.3.2 输入框TextField监听
import java.awt.Color;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
监听文本框输入:
*/
public class Demo09Text {
public static void main(String[] args) {
//启动
new MyFrame();
}
}
class MyFrame extends Frame {
public MyFrame() {
//创建文本框对象
TextField textField = new TextField();
//将之加入frame
add(textField);
//监听这个文本框输入的文字
MyActionListener1 myActionListener1 = new MyActionListener1();
//按下enter就会触发这个输入框的事件
textField.addActionListener(myActionListener1);
//设置替换编码
textField.setEchoChar('*');
//frame属性设置:
setBounds(200, 200, 400, 400);
setBackground(Color.PINK);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//监听事件
class MyActionListener1 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//获得资源,返回对象
TextField textField = (TextField) e.getSource();
//获得输入框的文本;
System.out.println(textField.getText());
textField.setText("");
}
}
-
结果演示:
- 输入文本:你好,Java
- 按下回车:
- 输入文本:你好,Java
2.3.3简易计算器
-
功能:实现简单的加法运算:
-
代码
- 基础实现:
import java.awt.Button; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /* 简易计算器 */ public class Demo11Calc01 { public static void main(String[] args) { new Calculator(); } } //计算器类 class Calculator extends Frame { public Calculator(){ //3 个文本框 TextField num1 = new TextField(10);//字符数 TextField num2 = new TextField(10);//字符数 TextField num3 = new TextField(20);//字符数 //1 个按钮 Button button = new Button("="); button.addActionListener(new MyCalculatorListener2(num1,num2,num3)); //1 个标签 Label label = new Label("+"); //布局 setLayout(new FlowLayout()); add(num1); add(label); add(num2); add(button); add(num3); //frame属性设置: setBounds(200, 200, 400, 400); setBackground(Color.PINK); setVisible(true); pack(); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } } //监听器类 class MyCalculatorListener2 implements ActionListener { //获取三个变量 private TextField num1,num2,num3; public MyCalculatorListener2(TextField num1,TextField num2,TextField num3) { this.num1 = num1; this.num2 = num2; this.num3 = num3; } @Override public void actionPerformed(ActionEvent e) { //1. 获得加数和被加数 int n1 = Integer.parseInt(num1.getText()); int n2 = Integer.parseInt(num2.getText()); //2. 将这个值 + 法运算后,放到第三个框 num3.setText(""+(n1+n2)); } }
-
结果演示:
- 改造为面向对象:
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//简易计算器
public class Demo12Calc02 {
public static void main(String[] args) {
new Calculator().loadFrame();
}
}
//计算器类
class Calculator extends Frame {
//属性
TextField num1, num2, num3;
//方法
public void loadFrame() {
num1 = new TextField(10);//字符数
num2 = new TextField(10);//字符数
num3 = new TextField(20);//字符数
Button button = new Button("=");
Label label = new Label("+");
button.addActionListener(new MyCalculatorListener(this));
//布局
setLayout(new FlowLayout());
add(num1);
add(label);
add(num2);
add(button);
add(num3);
//frame属性设置:
setBounds(200, 200, 400, 400);
setBackground(Color.PINK);
setVisible(true);
pack();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//监听器类
class MyCalculatorListener implements ActionListener {
//获取计算器这个对象,在一个类中组合另外一个类;
Calculator calculator = null;
public MyCalculatorListener(Calculator calculator) {
this.calculator = calculator;
}
@Override
public void actionPerformed(ActionEvent e) {
//1. 获得加数和被加数
int n = Integer.parseInt(calculator.num1.getText());
//2. 将这个值 + 法运算后,放到第三个框
int m = Integer.parseInt(calculator.num2.getText());
calculator.num3.setText("" + (n + m));
}
}
- 结果演示:
- 内部类,更好的包装:
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
简易计算器
*/
public class Demo10Calc {
public static void main(String[] args) {
//启动
new Calculator().loadFrame();
}
}
//计算器类:
class Calculator extends Frame {
//属性:
TextField num1, num2, num3;
//方法:
public void loadFrame() {
num1 = new TextField(10);//字符数
num2 = new TextField(10);//字符数
num3 = new TextField(20);//字符数
Button button = new Button("=");
Label label = new Label("+");
button.addActionListener(new MyCalculatorListener());
//设置布局
setLayout(new FlowLayout());
//添加组件
add(num1);
add(label);
add(num2);
add(button);
add(num3);
//frame属性设置:
setBounds(200, 200, 400, 400);
setBackground(Color.PINK);
setVisible(true);
pack();
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
//监听事件
//设置为内部类的好处就是可以畅通无阻的访问外部的属性和方法
private class MyCalculatorListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int n = Integer.parseInt(num1.getText());
int m = Integer.parseInt(num2.getText());
//将值进行加法运算后,放入第三个框
num3.setText("" + (n + m));
}
}
}
- 结果演示:
2.3.4 画笔
package com.sd.day22;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
画笔
*/
public class Demo13Paint {
public static void main(String[] args) {
new MyPanit().loadFrame();
}
private static class MyPanit extends Frame {
public void loadFrame() {
//设置窗口属性
setBounds(200, 200, 400, 400);
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void paint(Graphics g) {
//绘制实体矩形
g.fillRect(100, 100, 200, 200);
}
}
}
- 结果演示:
2.3.5 鼠标监听
-
当点击鼠标按钮时,有三个监听器方法可以调用:
public void mousePressed(MouseEvent e); //鼠标按下时调用; public void mouseReleased(MouseEvent e) //鼠标被释放时调用; public void mouseClicked(MouseEvent e) //鼠标点击时调用
-
以上三个方法均继承MouseListener接口;但是其中有很多不需要的方法,实现时就很麻烦,但是MouseAdapter类实现了MouseListener接口中的所有方法,我们可以直接继承该类并重写我们需要的方法就可以;
-
目的:实现鼠标画画;
-
代码
import java.awt.Color; import java.awt.Frame; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.Iterator; public class Demo4MouseListener { public static void main(String[] args) { new MyFrameDemo("画图"); } } /* 画画的类: 需要: 1.画笔; 2.监听鼠标当前位置; 3.集合来存储当前位置的点; */ class MyFrameDemo extends Frame { //ArrayList集合存储点 ArrayList points; public MyFrameDemo(String title) { super(title); setBounds(200, 200, 400, 400); //存鼠标点击的点 points = new ArrayList(); //可视化 setVisible(true); addWindowFocusListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); //鼠标监听器,正对这个窗口 this.addMouseListener(new MyMouseListener()); } @Override public void paint(Graphics g) { //画画,监听鼠标的事件 Iterator iterator = points.iterator(); while (iterator.hasNext()) { Point point = (Point) iterator.next(); g.setColor(Color.PINK); g.fillRect(point.x, point.y, 10, 10); } } //添加一个点到界面上 public void addPaint(Point point) { points.add(point); } //鼠标按下时调用; private class MyMouseListener extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { MyFrameDemo frameDemo = (MyFrameDemo) e.getSource(); //此点为鼠标点击的点,点击的时候,就会在界面上产生一个点 frameDemo.addPaint(new Point(e.getX(), e.getY())); //每次鼠标点击都需要重新画一遍 frameDemo.repaint();//刷新 } } }
-
结果演示:
2.3.6 窗口监听
-
窗口监听事件:WindowListener
windowOpened //打开 windowActivated //激活(获得焦点状态) windowDeactivated //非激活(失去焦点状态) windowIconified //最小化 windowDeiconified //最小化恢复正常 windowClosing //关闭(右上角X),优先于windowClosed windowClosed //关闭,DISPOSE_ON_CLOSE时才会被调用
-
代码:
-
演示结果:
2.3.7 键盘监听
-
当按下、释放时,有以下监听器方法可以调用:
public void keyPressed(KeyEvent e); //按下某键时调用; public void keyReleased(KeyEvent e) //释放某键时调用;
-
以上方法均继承KeyListener接口;但是其中有很多不需要的方法,实现时就很麻烦,但是KeyAdapter类实现了KeyListener接口中的所有方法,我们可以直接继承该类并重写我们需要的方法就可以;
-
代码:
import java.awt.Frame; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /* 键盘监听 */ public class Demo15KeyListener { public static void main(String[] args) { new KeyFrame(); } } //键盘监听类 class KeyFrame extends Frame { public KeyFrame(){ setBounds(200,200,400,400); setVisible(true); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); this.addKeyListener(new KeyAdapter() { //键盘按下 @Override public void keyPressed(KeyEvent e) { //获得键盘下的键是哪一个 int keyCode = e.getKeyCode(); if(keyCode==KeyEvent.VK_DOWN){ System.out.println("你按下了上键!"); } } }); } }
-
结果演示:当按下“↓”键的时候,控制台输出“你按下了下键”