Java学习14:画图

14. 画图

14.1 坐标系

坐标原点位于左上角,以像素为单位。在jaca坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。

35

14.2 画图实例

画一个圆形

package com.draw;

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

/**
 * @author Rain
 */
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);
        // 关闭窗口就结束程x
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //弹出窗口
        this.setVisible(true);
        // 监听窗口关闭事件
        this.addWindowListener(new WindowAdapter() {
            
            public void windowClosing(WindowEvent e) {
                System.out.println("关闭窗口了");
                System.exit(0);
            }
        });
    }
}

//1.先定义一个MyPanel(画板),继承JPanel类
class MyPanel extends JPanel{
    //1.
    @Override
    public void paint(Graphics g) {//绘图方法
        super.paint(g);//调用父类的方法完成初始化
        System.out.println("paint调用");
        //画一个圆
        g.drawOval(10,10,100,100);
    }
}

14.3 绘图原理

Component类提供了两个和绘图相关最重要的方法

  1. paint(Graphics g)绘制组件的外观
  2. repaint()刷新组件的外观

当组件第一次在屏幕显示的时候,程序会自动调用paint()方法绘制组件。

paint()被调用情况:

  1. 组件第一次屏幕显示
  2. 窗口最小化,再最大化
  3. 窗口大小发生变化
  4. repaint方法被调用

14.4 Graphics(画笔)常用方法

Graphics类可以理解为画笔,提供了各种绘制图形的方法

  1. 画直线:drawLine(int x1, int y1, int x2, int y2)
// 画直线 点1坐标,点2坐标
g.drawLine(10,10,100,100);
  1. 画矩形边框:drawRect(int x, int y, int width, int height)
// 画矩形 图片左上角坐标x,y;矩形宽高w,h
g.drawOval(10,10,300,300);
  1. 画椭圆边框:drawOval(int x, int y, int width, int height)
// 画椭圆 图片左上角坐标x,y;椭圆宽高w,h
g.drawOval(10,10,300,300);
  1. 填充矩形:fillRect(int x, int y, int width, int height)
// 填充矩形 左上角坐标,矩形宽高
g.fillRect(10,10,100,100);
  1. 填充椭圆:fillOval(int x, int y, int width, int height)
// 填充椭圆 图片左上角坐标x,y;椭圆宽高w,h
g.fillOval(10,10,300,300);
  1. 画图片:drawImage(Image img, int x, int y, int width, int height)
// 读取out文件夹下,项目根目录中的图片
Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/image1.png"));
// 画图片 (图片,左上角横坐标,左上角纵坐标,宽,高,this)
g.drawImage(image,60,60,100,100,this);
  1. 画字符串:drawString(String str, int x, int y)
// 画字符串 字符串, 左下角坐标
g.drawString("你好,世界", 100,100);
  1. 设置画笔字体:setFont(Font font)
// 设置字体:字体,加粗,字号
g.setFont(new Font("隶书", Font.BOLD, 50)); 
  1. 设置画笔颜色:setColor(Color c)
// 设置画笔颜色
g.setColor(Color.red); 

14.5 事件处理机制

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

实现KeyListener接口类可以作为事件监听器,把事件监听器放入窗口对象可以监听事件发生,在对应的方法中实现功能

举例:

打印键盘按下的键,如果如果按下的是Q,打印”输入正确“

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

// 窗口类,继承JFrame类
public class Event_ extends JFrame {
    TestEvent testEvent;
    public Event_(){
        // 创建事件监听器
        testEvent = new TestEvent();
        
        // 把事件监听器放入窗口
        this.addKeyListener(testEvent);
        
        // 设置窗口大小
        this.setSize(500, 500);

        // 关闭窗口就结束程序
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 弹出窗口
        this.setVisible(true);
    }

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

// 事件监听器类,实现KeyListener接口
// 需要实现下面三个方法
class TestEvent implements KeyListener{

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) { // 键盘按下
        // 打印按下的键
        System.out.println((char) e.getKeyCode());
        
        // 如果按下的是Q,打印”输入正确“
        if (e.getKeyCode() == KeyEvent.VK_Q){
            System.out.println("输入正确");
        }

    }

    @Override
    public void keyReleased(KeyEvent e) { // 键盘松开

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值