1、AWT
1.1 基本介绍
- 包含很多的类和接口
- 元素:窗口、按钮、文本框
- java.awt
1.2、Frame
import java.awt.*;
//GUI的第一个界面
public class TestFrame {
public static void main(String[] args) {
//1、实例化一个Frame(可在JDK中看源码学习)
Frame frame = new Frame("我的第一个java图形界面窗口");
//2、设置可见性
frame.setVisible(true);
//3、设置窗口大小
frame.setSize(800,600);
//4、设置背景颜色
frame.setBackground(new Color(255, 55, 55));
//5、弹出的初始位置
frame.setLocation(20,20);
//6、窗口可否改变
frame.setResizable(false);
}
}
- 展示多个窗口
import java.awt.*;
public class TestFrame2 {
public static void main(String[] args) {
//展示多个窗口
MyFrame mf1 = new MyFrame(10, 10, 200, 200, Color.black);
MyFrame mf2 = new MyFrame(10, 210, 200, 200, Color.red);
MyFrame mf3 = new MyFrame(210, 10, 200, 200, Color.green);
MyFrame mf4 = new MyFrame(210, 210, 200, 200, Color.yellow);
}
}
class MyFrame extends Frame{
//设置一个计数器
static int id = 0;
public MyFrame(int x, int y, int w, int h,Color color){
super("Myframe" + (++id));
setBounds(x,y,w,h);
setBackground(color);
setResizable(false);
setVisible(true);
}
}
1.3、Panel
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestPanel {
public static void main(String[] args) {
Frame frame = new Frame();
//开始布局
Panel panel = new Panel();
//设置布局
frame.setLayout(null);
frame.setBounds(20,20,400,400);
frame.setBackground(new Color(218, 61, 49));
//panel设置
panel.setBounds(40,40,100,100);
panel.setBackground(Color.darkGray);
//加入面板
frame.add(panel);
//显示
frame.setVisible(true);
//如何关闭窗口?
//监听事件,适配器模式,选择windowsClosing
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
//结束程序
System.exit(0);
}
});
}
}
1.4、布局管理器
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestFlowLayout {
public static void main(String[] args) {
Frame frame = new Frame("FlowLayout");
//组件-按钮
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.RIGHT));//右对齐
frame.setSize(200,200);
//把按钮添加上去
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);
}
});
}
}
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestBorderLayout {
public static void main(String[] args) {
Frame frame = new Frame("BorderLayout");
//组件-按钮
Button east = new Button("East");
Button south = new Button("South");
Button west = new Button("West");
Button north = new Button("North");
Button center = new Button("Center");
frame.add(east,BorderLayout.EAST);
frame.add(south,BorderLayout.SOUTH);
frame.add(west,BorderLayout.WEST);
frame.add(north,BorderLayout.NORTH);
frame.add(center,BorderLayout.CENTER);
frame.setSize(200,200);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestGridLayout {
public static void main(String[] args) {
Frame frame = new Frame();
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");
frame.setLayout(new GridLayout(3,2));
frame.add(btn1);
frame.add(btn2);
frame.add(btn3);
frame.add(btn4);
frame.add(btn5);
frame.add(btn6);
// frame.setSize(200,200);
frame.pack();//自动填充合适的大小
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class ExperientDemo {
public static void main(String[] args) {
Frame frame = new Frame("ExperientDemo");
frame.setSize(400,300);
frame.setLocation(300,400);
frame.setBackground(Color.BLACK);
frame.setVisible(true);
//先上下分2框
frame.setLayout(new GridLayout(2,1));
//4个面板
Panel p1 = new Panel(new BorderLayout());
Panel p2 = new Panel(new GridLayout(2, 1));
Panel p3 = new Panel(new BorderLayout());
Panel p4 = new Panel(new GridLayout(2, 2));
p1.add(new Button("East-1"),BorderLayout.EAST);
p1.add(new Button("West-1"),BorderLayout.WEST);
p2.add(new Button("p2-btn-1"));
p2.add(new Button("p2-btn-2"));
p1.add(p2,BorderLayout.CENTER);
p3.add(new Button("East-3"),BorderLayout.EAST);
p3.add(new Button("West-3"),BorderLayout.WEST);
for (int i = 0; i < 4; i++) {
p4.add(new Button("for-" + i));
}
p3.add(p4,BorderLayout.CENTER);
frame.add(p1);
frame.add(p3);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
1.5、事件监听
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestAction {
public static void main(String[] args) {
//按下按钮,触发事件
Frame frame = new Frame();
Button button = new Button();
//实例化一个监听事件
MyActionListener myActionListener = new MyActionListener();
//按钮添加监听事件
button.addActionListener(myActionListener);
frame.add(button,BorderLayout.CENTER);
frame.pack();
//关闭窗口
windowClose(frame);
frame.setVisible(true);
}
//关闭窗口的事件
public static void windowClose(Frame frame) {
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("aaa");
}
}
- 多个按钮共享一个事件
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestActionTwo {
public static void main(String[] args) {
//两个按钮,实现同一个监听
//开始、停止
Frame frame = new Frame();
Button button1 = new Button("start");
Button button2 = new Button("stop");
button2.setActionCommand("button2-stop");
MyMonitor myMonitor = new MyMonitor();
button1.addActionListener(myMonitor);
button2.addActionListener(myMonitor);
frame.add(button1,BorderLayout.NORTH);
frame.add(button2,BorderLayout.SOUTH);
frame.pack();
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) {
//e.getActionCommand() 获取按钮的信息
System.out.println("按钮被点击了:msg=>" + e.getActionCommand());
}
}
1.6、输入框TextField监听
-
1、建立main方法psvm,新建一个MyFrame方法
-
2、新建MyFrame类并继承Frame类
-
3、新建公众public的MyFrame()方法
-
4、实例化一个文本框对象TextField:testField
-
5、添加add,值为testField
-
10、实例化一个MyActionListener监听对象:myActionListener
-
11、testField添加行动监听方法.addActionListener,值为myActionListener
-
17、testField设置回声字符.setEchoChar,输入时看到都是*,系统可正常获取
-
12、打包pack()
-
13、设置显示setVisible,值为真true
-
14、添加窗口监听addWindowListener,值为一个新的窗口适配器WindowAdapter
-
15、重写窗口关闭windowClosing方法
- 16、系统System的退出.exit,值为0
-
-
-
-
6、新建一个MyActionListener类继承ActionListener接口
- 7、重写动作执行方法actionPerformed
- 8、获得一些资源的方法e.getsoure(),并强制转化为对话框(TextField),在赋值给对话框类TextField的field
- 9、field获得输入框文本的方法.getText,并打印输出sout
- 18、field设置文本.setTest,值空,实现回车清空的效果
- 7、重写动作执行方法actionPerformed
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestText01 {
public static void main(String[] args) {
//main方法主要功能就是启动
new MyFrame();
}
}
class MyFrame extends Frame{
public MyFrame(){
//实例化一个文本框
TextField textField = new TextField();
add(textField);
//输入完成回车后,触发这个输入框事件
MyActionListener2 myActionListener2 = new MyActionListener2();
//监听文本框中输入的文字
textField.addActionListener(myActionListener2);
//设置回声字符,输入时看到都是*,系统可正常获取
textField.setEchoChar('*');
pack();
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
class MyActionListener2 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
TextField field = (TextField)e.getSource();//获得一些资源,返回一个对象
System.out.println(field.getText());//获得输入框中的文本
field.setText(""); //回车清空
}
}
1.7、简易计算器
第一次尝试:面向过程
- 1、建立main方法
- 13、新建计算器方法Calculator()
- 2、建立计算器类Calculator,继承Frame
- 3、新建计算器方法Calculator()
- 6、新建3个文本框TextField:num1、num2、num3,值为字符数分别为:10,10,20
- 7、新建1个按钮Button:button,值为“=”
- 14、button添加行为监听方法.addActionListener(),值为新建我的计算器监听方法MyCalculatorListener(),值为num1、num2、num3
- 8、新建1个标签Label:label,值为“+”
- 9、设置布局setLayout,值为新建一个流布局FlowLayout
- 10、依次加入add:num1,label、num2、button、num3
- 11、打包pack()
- 12、设置显示setVisible,值为真true
- 21、加入窗口监听addWindowListener()并实现系统关闭(详解省略,请看上文)
- 3、新建计算器方法Calculator()
- 4、建立计算器监听类MyCalulatorListener,继承动作监听接口ActionListener
- 15、定义私有变量private、类型为文本框TextField的三个变量:num1、num2、num3
- 16、定义共有public、我的计算机监听方法MyCalculatorListener(),值为文本框类型的TextField:num1、num2、num3
- 17、输入的num1、num2、num3的值赋值给类中的三个私有变量this.:num1、num2、num3
- 5、重写动作执行方法actionPerformed(),值为行为动作类ActionEven:e
- 18、获得加数和被加数:变量num1、2先获取文本方法.getText(),在通过转化int型方法Integer.parseInt()转化为int型,最后赋值给int型的变量n*
- 19、加法运算后返回第三个框:变量num3设置文本方法.setText(),值为n1+n2的和加上+一个空字符“”转化的String类型
- 20、清除连个文本框的值:变量1、2设置文本方法.setText(),值为空“”
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//简易计算器
public class TestCalc {
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 MyCalculatorListener(num1,num2,num3));
//1个标签
Label label = new Label("+");
//布局:流式布局
setLayout(new FlowLayout());
//添加
add(num1);
add(label);
add(num2);
add(button);
add(num3);
pack();
setVisible(true);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//监听器类
class MyCalculatorListener implements ActionListener{
//获取三个变量
private TextField num1,num2,num3;
public MyCalculatorListener(TextField num1,TextField num2,TextField num3){
this.num1 = num1;
this.num2 = num2;
this.num3 = num3;
}
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
//加法运算后返回到第三个框
num3.setText("" + (n1 + n2));
//清除前两个框的值
num1.setText("");
num2.setText("");
}
}
第二次优化:组合,面向对象
-
1、建立main方法
- 21、新建计算器方法Calculator2().loadFrame
-
2、建立计算器类Calculator2,继承Frame
-
3、属性:新建文本框类的三个变量num1、num2、num3
-
4、新建公众public、无返回值void、载入框架方法loadFrame()
-
5、新建3个文本框TextField,值为字符数分别为:10,10,20,赋值为:num1、num2、num3
-
新建1个标签Label:label,值为“+”
-
6、新建1个按钮Button:button,值为“=”
-
7、button添加行为监听方法.addActionListener(),值为新建我的计算器监听方法MyCalculatorListener(),值为this
-
8、设置布局setLayout,值为新建一个流布局FlowLayout
-
9、依次加入add:num1,label、num2、button、num3
-
10、打包pack()
-
11、设置显示setVisible,值为真true
-
12、加入窗口监听addWindowListener()并实现系统关闭(详解省略,请看上文)
-
-
-
13、建立计算器监听类MyCalulatorListener,继承动作监听接口ActionListener
- 14、在一个类中组合另一个类,获取计算器:Calculatro2类型calculator2,并赋值其为null
- 15、定义共有public、我的计算机监听方法MyCalculatorListener(),值为Calculator类型的Calculator
- 16、输入的Calculator赋值给this.calculator
- 5、重写动作执行方法actionPerformed(),值为行为动作类ActionEven:e
- 18、获得加数和被加数:calculator2.num1、2先获取文本方法.getText(),在通过转化int型方法Integer.parseInt()转化为int型,最后赋值给int型的变量n1、n2
- 19、加法运算后返回第三个框:calculator.num3设置文本方法.setText(),值为n1+n2的和加上+一个空字符“”转化的String类型
- 20、清除连个文本框的值:calculator.num1、2设置文本方法.setText(),值为空“”
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//简易计算器
public class TestCalculat {
public static void main(String[] args) {
new Calculator2().loadFrame();
}
}
//计算器类
class Calculator2 extends Frame{
//属性
TextField num1,num2,num3;
//方法
public void loadFrame(){
//主键:3个文本框,1个标签,1个按钮
num1 = new TextField(10); //字符数
num2 = new TextField(10); //字符数
num3 = new TextField(20); //字符数
Label label = new Label("+");
Button button = new Button("=");
//监听器
button.addActionListener(new MyCalculatorListener2(this));
//布局:流式布局
setLayout(new FlowLayout());
//添加
add(num1);
add(label);
add(num2);
add(button);
add(num3);
//打包、显示
pack();
setVisible(true);
//窗口关闭
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
}
//监听器类
class MyCalculatorListener2 implements ActionListener{
//在一个类中组合另外一个类,获取计算器
Calculator2 calculator2 = null;
public MyCalculatorListener2(Calculator2 calculator2){
this.calculator2 = calculator2;
}
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int n1 = Integer.parseInt(calculator2.num1.getText());
int n2 = Integer.parseInt(calculator2.num2.getText());
//加法运算后返回到第三个框
calculator2.num3.setText("" + (n1 + n2));
//清除前两个框的值
calculator2.num1.setText("");
calculator2.num2.setText("");
}
}
第三次优化:内部类
-
1、建立main方法psvm
- 18、新建计算器方法Calculator2().loadFrame
-
2、建立计算器类Calculator3,继承Frame
-
3、属性:新建文本框类的三个变量num1、num2、num3
-
4、新建公众public、无返回值void、载入框架方法loadFrame()
-
5、新建3个文本框TextField,值为字符数分别为:10,10,20,赋值为:num1、num2、num3
-
新建1个标签Label:label,值为“+”
-
6、新建1个按钮Button:button,值为“=”
-
7、button添加行为监听方法.addActionListener(),值为新建我的计算器监听方法MyCalculatorListener(),值为this
-
8、设置布局setLayout,值为新建一个流布局FlowLayout
-
9、依次加入add:num1,label、num2、button、num3
-
10、打包pack()
-
11、设置显示setVisible,值为真true
-
12、加入窗口监听addWindowListener()并实现系统关闭(详解省略,请看上文)
-
13、建立计算器监听类MyCalulatorListener,继承动作监听接口ActionListener
-
14、重写动作执行方法actionPerformed(),值为行为动作类ActionEven:e
-
15、获得加数和被加数:calculator2.num1、2先获取文本方法.getText(),在通过转化int型方法Integer.parseInt()转化为int型,最后赋值给int型的变量n1、n2
-
16、加法运算后返回第三个框:calculator.num3设置文本方法.setText(),值为n1+n2的和加上+一个空字符“”转化的String类型
-
17、清除连个文本框的值:calculator.num1、2设置文本方法.setText(),值为空“”
-
-
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//简易计算器
public class TestCalculator {
public static void main(String[] args) {
new Calculator3().loadFrame();
}
}
//计算器类
class Calculator3 extends Frame{
//属性
TextField num1,num2,num3;
//方法
public void loadFrame(){
//主键:3个文本框,1个标签,1个按钮
num1 = new TextField(10); //字符数
num2 = new TextField(10); //字符数
num3 = new TextField(20); //字符数
Label label = new Label("+");
Button button = new Button("=");
//监听器
button.addActionListener(new MyCalculatorListener3());
//布局:流式布局
setLayout(new FlowLayout());
//添加
add(num1);
add(label);
add(num2);
add(button);
add(num3);
//打包、显示
pack();
setVisible(true);
//窗口关闭
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
//监听器类
private class MyCalculatorListener3 implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//获得加数和被加数
int n1 = Integer.parseInt(num1.getText());
int n2 = Integer.parseInt(num2.getText());
//加法运算后返回到第三个框
num3.setText("" + (n1 + n2));
//清除前两个框的值
num1.setText("");
num2.setText("");
}
}
}
1.8、画笔
- 1、建立main方法psvm
- 18、新建画笔方法MyPaint().loadFrame()
- 2、建立画笔类MyPaint,继承Frame
- 3、新建公众public、无返回值void、载入框架方法loadFrame()
- 设置边界setBounds,值为20,20处实现600*600的框架
- 设置可见方法,值为真(详情省略)
- 重写画笔:公众的public、无返回值void、画笔方法paint(),值为Graphics类的g
- 设置颜色方法.setcolor(),值为颜色类的红色red
- 绘制空心圆方法.drawOval(),值为50,50处绘制100*100的空心圆
- 绘制实心圆方法.fillOval(),值为150,150处绘制100*100的实心圆
- 设置颜色方法.setcolor(),值为颜色类的黄色yellow
- 绘制实心长方形方法.fillRect(),值为200,20处绘制200*100的实心长方形
- 最后,当画笔用完后,将他的颜色还原成默认黑色:设置颜色方法.setcolor(),值为颜色类的黑色black
- 3、新建公众public、无返回值void、载入框架方法loadFrame()
import java.awt.*;
public class TestPaint {
public static void main(String[] args) {
new MyPaint().loadFrame();
}
}
class MyPaint extends Frame{
public void loadFrame(){
setBounds(20,20,600,600);
setVisible(true);
}
//画笔
@Override
public void paint(Graphics g){
g.setColor(Color.red); //选择颜色:红
g.drawOval(50,50,100,100); //绘制100*100的空心圆
g.fillOval(150,150,100,100); //绘制100*100的实心圆
g.setColor(Color.yellow); //设置颜色:黄
g.fillRect(200,20,200,100); //绘制200*100的实心长方形
//养成习惯,画笔用完,将他还原成最初的颜色
g.setColor(Color.black);
}
}
1.9、鼠标监听
-
1、建立main方法psvm
- 18、新建框架方法MyFram(),值为画图
-
2、建立我的框架类MyFrame,继承Frame
-
11、属性队列ArrayList一个点points
-
3、新建公众public、我的框架方法MyFrame(),值为String类型的标题title
-
4、super(),值为title
-
12、设置边界方法setBounds(),值为200,200,长度400,宽度300的长方形
-
13、存鼠标点击的点:新建队列,赋值到点points
-
22、设置可见方法setVisible(),值为真true
-
5、添加鼠标监听:this.addMouseListener(),值为新建一个我的鼠标监听方法MyMouseListener()
-
-
6、重写公众的public,无返回值void,画笔方法paint(),值为Graphics类型的g
-
14、将点points的迭代方法iterator()赋值给迭代器类型Iterator的iterator
-
15、while循环,值为如果iterator后面还有
-
16、iterator的下面next()赋值给Point类型的point
-
17、设置颜色方法g.setColor(),值为蓝色
-
18、设置实心圆方法g.fillOval(),值为point.x,point.y,宽度10,高度10
-
-
-
19、添加一个点到界面上:公众的public、无返回值void、添加点方法addPaint(),值为Point类型的point
- 20、点points添加add(),值为point
-
7、私有的private、我的鼠标监听类MyMouseListener,继承鼠标适配器MouseAdapter
- 8、重写鼠标点击方法:公共的public、无返回值viod、鼠标点击方法mousePressed(),值为鼠标事件类MouseEven的e
- 9、获得资源e.getSource(),强制转换(MyFrame),并赋值于MyFrame类的myFrame
- 10、新建一个Point(),值为e.getX(),e.getY()
- 21、我的框架myFrame,添加点的方法.addpaint(),值为Point()
- 23、设置重画.repaint(),让每次点击鼠标都需要重画一次,相当于是刷新
- 8、重写鼠标点击方法:公共的public、无返回值viod、鼠标点击方法mousePressed(),值为鼠标事件类MouseEven的e
-
package cn.wisdex.lesson03;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Iterator;
public class TestMouseListener {
public static void main(String[] args) {
new MyFrame("画图");
}
}
class MyFrame extends Frame{
ArrayList points;
public MyFrame(String title) {
super(title);
setBounds(200,200,400,300);
//存鼠标点击的点
points = new ArrayList<>();
setVisible(true);
//添加鼠标
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.BLUE);
g.fillOval(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) {
MyFrame myFrame = (MyFrame) e.getSource();
//确定鼠标的点
myFrame.addPaint(new Point(e.getX(),e.getY()));
//每次点击鼠标都需要重画一遍,相当于是刷新
myFrame.repaint();
}
}
}
1.10、窗口监听
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestWindow {
public static void main(String[] args) {
new windowFrame();
}
}
class windowFrame extends Frame{
public windowFrame() {
setBackground(Color.red);
setBounds(100,100,200,200);
setVisible(true);
addWindowListener(new MyWindowListener());
}
//内部类
class MyWindowListener extends WindowAdapter{
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
}
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class TestWindow {
public static void main(String[] args) {
new windowFrame();
}
}
class windowFrame extends Frame{
public windowFrame() {
setBackground(Color.red);
setBounds(100,100,200,200);
setVisible(true);
this.addWindowListener(
//匿名内部类
new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
}
}
);
}
1.11 键盘监听
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class TestKeyListener {
public static void main(String[] args) {
new KeyFrame();
}
}
class KeyFrame extends Frame{
public KeyFrame(){
setBackground(Color.red);
setBounds(20,20,400,300);
setVisible(true);
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
int keycode = e.getKeyCode();
System.out.println(keycode);
if (keycode == KeyEvent.VK_D){
System.out.println("自己人");
}
}
});
}
}