Java语言基础--界面与事件


界面

简单坦克代码

public class DrawCircle extends JFrame{

    private JPanel pm = null;
    
    public static void main(String[] args) {
        new DrawCircle();
    }
    
    public DrawCircle(){
        this.pm = new MyPanel();
        this.add(this.pm);
        this.setSize(400, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }

}

class MyPanel extends JPanel{
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        System.out.println("paint 调用");
        g.drawOval(100, 100, 20, 20);
        g.drawRect(95, 95, 30, 30);
        g.drawRect(85, 85, 10, 50);
        g.drawRect(125, 85, 10, 50);
        g.drawLine(110, 110, 110, 85);
    }
}

事件

Java事件处理采取“委派事件模型”,当事件发生时,产生事件的对象,会把此“信息”传递给“事件的监听者”处理,这里所说的“信息”实际上就是java.awt.event事件类库里某个类所创建的对象.把它称为“事件的对象”

事件源:按钮、窗口... 事件:携带相关事件信息的对象(java.awt.event、java.swing.event等包预先定义,可查jdk手册) 事件监听器者:实现了时间监听接口的类,用来处理事件源传递的事件(java.awt.event、java.swing.event,可查jdk手册)

移动的小球案例

import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class DrawCircle extends JFrame{

    private MyPanel pm = null;

    public static void main(String[] args) {
        new DrawCircle();
    }

    public DrawCircle(){
        this.pm = new MyPanel();
        this.add(this.pm);
        // 窗口容器加入监听对象,可以多个
        this.addKeyListener(this.pm);
        this.setSize(400, 300);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
}

// 实现键盘监听接口
class MyPanel extends JPanel implements KeyListener {
    private int x = 100;
    private int y = 100;

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.fillOval(x, y, 20, 20);
    }

    // 监听有字符输出时,该方法被触发
    @Override
    public void keyTyped(KeyEvent e) {

    }

    // 监听键按下,该方法触发
    @Override
    public void keyPressed(KeyEvent e) {
        // 是否是向下键
        if (e.getKeyCode()==KeyEvent.VK_DOWN){
            y++;
        }
        // 是否是向上键
        if (e.getKeyCode()==KeyEvent.VK_UP){
            y--;
        }
        // 是否是向左键
        if (e.getKeyCode()==KeyEvent.VK_LEFT){
            x--;
        }
        // 是否是向右键
        if (e.getKeyCode()==KeyEvent.VK_RIGHT){
            x++;
        }

        this.repaint();
    }

    // 监听键松开,该方法触发
    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println(e.getKeyChar());
    }
}