Han Shunping lernte Java in 30 Tagen ohne Grundkenntnisse [Kapitel 14 Zeichnen und Ereignisverarbeitung]

P570 ~ P572

Schnellstart, DrawCircle.java

import javax.swing.*;
import java.awt.*;

public class DrawCircle extends JFrame {//JFrame对应窗口,可以理解成是一个画框
    //定义一个面板
    private MyPanel mp = null;
    public static void main(String[] args) {
        new DrawCircle();
    }
    public DrawCircle() {
        //初始化面板
        mp = new MyPanel();
        //把面板放入到窗口
        this.add(mp);
        //设置窗口大小
        this.setSize(400, 300);
        //点击窗口关闭,程序真正退出
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置显示窗口
        this.setVisible(true);
    }
}

class MyPanel extends JPanel {
    //说明
    //MyPanel,理解成一个画板
    //Graphics g,g是一个画笔
    //Graphics提供很多方法
    @Override
    public void paint(Graphics g) {//Graphics绘图
        super.paint(g);//调用父类方法完成初始化
        System.out.println("paint被调用");
        g.drawOval(10, 10, 100, 100);
    }
}

Zeichenprinzip

  1. Die Component-Klasse stellt zwei zeichnungsbezogene Methoden bereit
  2. paint(Graphics g) zeichnet das Erscheinungsbild der Komponente
  3. repaint() aktualisiert das Erscheinungsbild der Komponente

Wenn die Komponente zum ersten Mal auf dem Bildschirm angezeigt wird, ruft das Programm automatisch die Methode paint() auf, um die Komponente zu zeichnen

paint() wird in den folgenden Fällen aufgerufen:

  1. Fenster minimieren und dann maximieren
  2. Fenstergröße ändert sich
  3. Die Repaint-Methode wird aufgerufen

GraphicsTechnology, GraphicsMethod.java

Die Graphics-Klasse, verstanden als Pinsel, stellt uns Zeichenmethoden zur Verfügung

  1. drawLine(int x1, int y1, int x2, int y2): Zeichne eine gerade Linie
  2. drawRect(int x1, int y1, int width, int height): Zeichnen Sie einen rechteckigen Rand
  3. drawOval(int x1,int y1,int width,int height): Zeichne einen Ellipsenrand
  4. fillRect(int x1, int y1, int width, int height): Rechteck füllen
  5. fillOval(int x1, int y1, int width, int height): Füllen Sie die Ellipse
  6. drawImage(Image img,int x,int y,int width,int height): Bilder anzeigen
  7. drawString(String str, int x, int y): Zeichne einen String
  8. setFont(Schriftart): Legen Sie die Pinselschriftart fest
  9. setColor(Farbe c): Setzt die Pinselfarbe
import javax.swing.*;
import java.awt.*;

public class GraphicsMethod extends JFrame {
    private MyPanel2 mp = null;
    public GraphicsMethod(){
        mp=new MyPanel2();
        this.add(mp);
        this.setSize(300,400);
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        new GraphicsMethod();
    }
}

class MyPanel2 extends JPanel{
    @Override
    public void paint(Graphics g) {
        super.paint(g);
//        1. drawLine(int x1,int y1,int x2,int y2):画直线
        g.drawLine(0,0,50,50);
//        2. drawRect(int x1,int y1,int width,int height):画矩形边框
        g.drawRect(50,0,50,50);
//        3. drawOval(int x1,int y1,int width,int height):画椭圆边框
        g.drawOval(100,0,50,50);
//        4. fillRect(int x1,int y1,int width,int height):填充矩形
        g.fillRect(150,0,50,50);
//        5. fillOval(int x1,int y1,int width,int height):填充椭圆
        g.setColor(Color.orange);
        g.fillOval(200,0,50,50);
//        6. drawImage(Image img,int x,int y):画图片
        //获取图片资源
        Image image=Toolkit.getDefaultToolkit().getImage(MyPanel2.class.getResource("bg.jpg"));
        g.drawImage(image,100,100,this);
//        g.drawImage
//        7. drawString(String str,int x,int y):画字符串
//        8. setFont(Font font):设置画笔字体
        g.setFont(new Font("黑体",Font.BOLD,50));
        g.drawString("12345",0,60);//对应字体左下角
//        9. setColor(Color c):设置画笔颜色
    }
}

Ereignisbehandlung, BallMove.java

Das Java-Ereignis übernimmt das „delegierte Ereignismodell“. Wenn ein Ereignis auftritt, übergibt das Objekt, das das Ereignis generiert, die Informationen zur Verarbeitung an den Ereignis-Listener. Das hier erwähnte Ereignis wird von einer Klasse im Ereignis java.awt.event erstellt Klassenbibliotheksobjekt, nennen Sie es das Ereignisobjekt

  1. Ereignisquelle: ist ein Objekt, das Ereignisse generiert, z. B. Schaltflächen, Fenster usw.
  2. Ereignis: Das Objekt, das die Statusänderung der Ereignisquelle überträgt, z. B. Tastaturereignis, Mausereignis, Fensterereignis usw., generiert ein Ereignisobjekt, das viele Informationen über das aktuelle Ereignis speichert, z. B. das KeyEvent-Objekt enthält den Codewert der gedrückten Taste. Verschiedene Ereignistypen sind in den Paketen java.awt.event und javax.swing.event definiert
  3. Ereignistyp
    1. Aktionsereignis
    2. Anpassungsereignis
    3. ComponentEvent
    4. ContainerEvent
    5. Schlüsselereignis
    6. MouseEvent
    7. TextEvent
    8. Fensterereignis
    9. FocusEvent
    10. ItemEvent
  4. Ereignis-Listener-Schnittstelle
    1. Wenn die Ereignisquelle ein Ereignis generiert, kann es zur Verarbeitung an den Ereignis-Listener gesendet werden
    2. Der Ereignis-Listener ist eigentlich eine Klasse, die eine Ereignis-Listener-Schnittstelle implementiert, um empfangene Ereignisse zu verarbeiten
    3. Es gibt viele Arten von Ereignis-Listener-Schnittstellen. Verschiedene Ereignis-Listener-Schnittstellen können unterschiedliche Ereignisse abhören. Eine Klasse kann mehrere Abhörschnittstellen implementieren.
    4. Diese Schnittstellen sind in den Paketen java.awt.event und javax.swing.event definiert
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class BallMove extends JFrame {
    MyPanel3 mp=null;
    public BallMove(){
        mp = new MyPanel3();
        this.add(mp);
        //JFrame可以监听键盘事件
        this.addKeyListener(mp);
        this.setSize(400,400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
    }
    public static void main(String[] args) {
        new BallMove();
    }
}
//keylistener监听键盘
class MyPanel3 extends JPanel implements KeyListener {
    int x=10;
    int y=10;
    @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) {
        System.out.println((char)e.getKeyCode()+"被按下");
        //根据用户按下的不同键处理移动
        if(e.getKeyCode()== KeyEvent.VK_DOWN){
            y++;
        }else if (e.getKeyCode()== KeyEvent.VK_UP){
            y--;
        }else if (e.getKeyCode()== KeyEvent.VK_LEFT){
            x--;
        }else if (e.getKeyCode()== KeyEvent.VK_RIGHT){
            x++;
        }
        this.repaint();
    }
    //当某个键释放时该方法触发
    @Override
    public void keyReleased(KeyEvent e) {
    }
}

Guess you like

Origin blog.csdn.net/weixin_65656674/article/details/126439385