回顾 : AWT
抽象窗口工具包,该包提供了一套与本地图形界面进行交互的接口,比如之前总结的容器,组件,布局管理器,事件的监听等等,是Java提供的用来建立和设置Java的图形用户界面的基本工具
GUI 画笔
基础 Frame 类,需要重写的方法是 paint
package JavaGUI;
import java.awt.*;
/**
* @Title:
* @Package
* @Description:
* @author: maze
* @date 2020/10/18下午 19:00
*/
public class Test11Paint {
public static void main(String[] args) {
new MyPaint().loarFrame();
}
}
class MyPaint extends Frame {
public void loarFrame(){
setBounds(200,200,600,600);
setVisible(true);
}
@Override
public void paint(Graphics g) {
g.setColor(Color.red);
g.fillOval(100,100,100,100);
g.drawOval(200,200,100,100);
g.fillRect(300,300,100,100);
}
}
鼠标监听
需求:实现鼠标监听事件画画
package JavaGUI;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.lang.reflect.Array;
import java.nio.channels.Pipe;
import java.util.ArrayList;
import java.util.Iterator;
/**
* @Title: MouseListener
* @Package JavaGUI
* @Description:
* @author: maze
* @date 2020/10/18下午 21:48
*/
public class Test12MouseListener {
public static void main(String[] args) {
new MyFrame3("画笔");
}
}
class MyFrame3 extends Frame {
ArrayList points;// 鼠标的位置
MyFrame3(String title){
super(title);
setBounds(100,100,400,400);
// 鼠标点击的点
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.cyan);
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) {
MyFrame3 myFrame = (MyFrame3) e.getSource();
// 这里点击的时候就会在界面上产生一个点
myFrame.addPaint(new Point(e.getX(),e.getY()));
// 每次点击鼠标,让它重新画一遍
myFrame.repaint(); //刷新页面
}
}
}
运行点击鼠标后,如下图
窗口监听
package JavaGUI;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* @Title: TestWindow
* @Package JavaGUI
* @Description:
* @author: maze
* @date 2020/10/18下午 23:18
*/
public class TestWindow {
public static void main(String[] args) {
new WindowFrame();
}
}
class WindowFrame extends Frame {
public WindowFrame(){
setBackground(Color.yellow);
setBounds(100,100,200,200);
setVisible(true);
addWindowListener(new MyWindowListener());
}
class MyWindowListener extends WindowAdapter{
@Override
public void windowClosing(WindowEvent e) {
setVisible(false); //通过按钮隐藏窗口
System.exit(0); //正常退出
}
}
}
增加内部类优化
public class TestWindow {
public static void main(String[] args) {
new WindowFrame();
}
}
class WindowFrame extends Frame {
public WindowFrame(){
setBackground(Color.yellow);
setBounds(100,100,200,200);
setVisible(true);
//addWindowListener(new MyWindowListener());
this.addWindowListener(new WindowAdapter() {
// 打开窗口
@Override
public void windowClosing(WindowEvent e) {
setVisible(false); //通过按钮隐藏窗口
System.exit(0); //正常退出
}
// 激活窗口
@Override
public void windowActivated(WindowEvent e) {
System.out.println("Window Activated");
}
});
}
}
键盘监听
监听键盘事件,当我们键盘按下一个键的时候,都是一个事件
package JavaGUI;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
/**
* @Title: Test13KeyListener
* @Package JavaGUI
* @Description:
* @author: maze
* @date 2020/10/19下午 23:12
*/
public class Test13KeyListener {
public static void main(String[] args) {
new KeyFrame();
}
}
class KeyFrame extends Frame {
public KeyFrame() {
setBounds(1,2,300,400);
setVisible(true);
this.addKeyListener(new KeyAdapter() {
// 键盘按下触发事件
@Override
public void keyPressed(KeyEvent e) {
// 这里获得按下的键,键盘的每一个键都有对应的数字
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_UP){
System.out.println("你按下了上键!");
}
if(keyCode == KeyEvent.VK_DOWN){
System.out.println("你按下了下键!");
}
if(keyCode == KeyEvent.VK_LEFT){
System.out.println("你按下了左键!");
}
if(keyCode == KeyEvent.VK_RIGHT){
System.out.println("你按下了右键!");
}
}
});
}
}
这个是一个重点,因为后期写游戏的时候,键盘会有按键,会执行做一些动作!
下一篇博客总结的是 GUI 编程另一个技术 : Swing