Java-图像绘制

本文围绕Java开发画画板展开,介绍了开发流程。先创建界面并添加按钮键与动作监听器,接着阐述鼠标监听器的使用方法,包括创建监听器类、复制方法、添加监听器等。还说明了直线、矩形、三角形等简单图像的绘画方式,最后讲解了实现按钮键绘制不同图形功能的操作。

一,界面创建

要建立一个画画板,首先要创建一个界面。

package com.qdl0924;

import java.awt.*;//导入工具包
import javax.swing.*;

        JFrame jf = new JFrame();//创建窗体
        jf.setTitle("画画板");//命名
        jf.setSize(1000, 1000);//尺寸
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//默认关闭操作
        FlowLayout fl = new FlowLayout();//创建流式布局操作
        jf.setLayout(fl);//在“jf”窗体中加入使用流式布局操作

   

其次,给单调的界面里加入按钮键,方便绘图(当然要给按钮键添加动作监听器)

        String[] btnstr = {"直线", "三角形", "等腰三角形", "矩形", "圆形", "实心圆形", "多边 
        形"};//创建一个数组
        for (int i = 0; i < btnstr.length; i++) {
            JButton btn = new JButton(btnstr[i]);//创建对应按钮
            jf.add(btn);//在“jf”窗体中添加按钮
            btn.addActionListener(dl);//给按钮添加动作监听器
        }

        Color[] colors = {Color.black, Color.RED, Color.BLUE,
                Color.YELLOW, Color.CYAN, Color.LIGHT_GRAY
                , Color.CYAN, Color.MAGENTA};
        for (int n = 0; n < colors.length; n++) {
            JButton btnc = new JButton("c");
            btnc.setBackground(colors[n]);//设置按钮背景颜色
            jf.add(btnc);
            btnc.addActionListener(dl);
        }

        jf.setVisible(true);//显示组件
        jf.setResizable(true);//可调节大小
        jf.setLocationRelativeTo(null);//窗体显示位置于屏幕中间

二,鼠标监听器

在图形绘制过程中,不得不提到鼠标监听器(MouseListener),用来监听鼠标的操作。现在,来看看鼠标监听器是怎样用的。

1.创建监听器类DrawListener并实现接口

public class DrawListener implements MouseListener{
}

2.复制MouseListener里面的方法到DrawListener下面

public class dffd implements MouseListener{
    @Override
    public void mouseClicked(MouseEvent e) {//点击
  
    }

    @Override
    public void mousePressed(MouseEvent e) {//按下

    }

    @Override
    public void mouseReleased(MouseEvent e) {//释放

    }

    @Override
    public void mouseEntered(MouseEvent e) {//鼠标进入窗体
    }

    @Override
    public void mouseExited(MouseEvent e) {//鼠标离开窗体

    }
}

3.给你的方法里写好代码

4.添加鼠标监听器——这里就是窗体添加鼠标监听器,在类中可视化后添加

     DrawListener dl = new DrawListener();//创建一个DrawListener对象
     jf.addMouseListener(dl);//给窗体添加鼠标监听器

5.在窗体在获取画笔

   Graphics g = jf.getGraphics();//在窗体中获取画笔

6.将画笔传到监听器中(使得监听器中也能用到画笔画图)

    dl.g = g;

7.在DrawListener中定义g

public class DrawListener implements MouseListener, ActionListener {//创建类来实现接口
    Graphics g;//定义g的属性

三,一些简单图像的绘画

一,直线

1.首先在鼠标按下的时候获取一个坐标(获取坐标的格式如下)

@Override
    public void mousePressed(MouseEvent e) {//按下
        x1=e.getX();
        y1=e.getY();
    }

2.在鼠标释放后获取一个坐标

@Override
    public void mouseReleased(MouseEvent e) {//释放
        x2=e.getX();
        y2=e.getY();

3.在获取完两个点的坐标后画出直线

@Override
    public void mouseReleased(MouseEvent e) {//释放
        x2=e.getX();
        y2=e.getY();
        g.drawLine(x1,y1,x2,y2);

注:g.drawLine();进行画线时,()内依次填两个点的坐标

二,矩形

矩形所需要的数据实际上也只有两个点的数据,只需在直线基础上改动数据即可

g.drawLine(x1,y1,x2,y1);
g.drawLine(x1,y1,x1,y2);
g.drawLine(x2,y1,x2,y2);
g.drawLine(x1,y2,x2,y2);

三,三角形

三角形是由三个顶点以及三条边组成的,所以要画出三角形,首先要确定三个顶点,然后画出三条边。因此,其代码应该与点击有关,具体如下。   


@Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("点击");
        System.out.println("x:" + x + "y:" + y);

        if (shapeType.equals("三角形")) {//点击三角形按钮
            if (c == 0) {//点击第一下
                x3 = e.getX();
                y3 = e.getY();//获取第一个点的坐标
                c++;
            } else if (c == 1) {//点击第二下
                x4 = e.getX();
                y4 = e.getY();//获取第二个点的坐标
                c++;
                g.drawLine(x3, y3, x4, y4);//画出一条边
            } else if (c == 2) {
                x5 = e.getX();
                y5 = e.getY();//获取第三个点的坐标
                g.drawLine(x3, y3, x5, y5);
                g.drawLine(x4, y4, x5, y5);//画出其余两条边
                c = 0;//前一个三角形画完之后让c=0,以便下一个三角形的绘制
            }

 四,实现按钮键的功能

在添加按钮键后,为了使点击按钮键后可以绘制不同图形,需进行以下操作

1.接收按钮键内的文本

2.获取按钮键上的文本

3.判断文本内容并实现相应图形的绘制

package com.qdl0924;
import java.awt.*;//引入需要调用的包文件
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;

public class DrawListener implements MouseListener, ActionListener {//创建类来实现接口
    Graphics g;//定义g的属性
    int x1, y1, x2, y2, x3, y3, x4, y4, x5, y5;
    int c;
    String shapeType = "直线";// 接收按钮上的文本

    @Override
    public void actionPerformed(ActionEvent e) {
        // ac: 按钮上的文本
        String ac = e.getActionCommand();//获取按钮键上的文本

        if(ac.equals("c")){
            JButton btn = (JButton) e.getSource();//获取按钮事件
            Color color = btn.getBackground();//获取按钮背景颜色
            g.setColor(color);//设置画笔颜色

        }else shapeType = ac;
    }
 @Override
    public void mouseReleased(MouseEvent e) {
        x2=e.getX();
        y2=e.getY();

        if(shapeType.equals("直线")){
            g.drawLine(x1,y1,x2,y2);

        } else if (shapeType.equals("矩形")) {
            g.drawLine(x1,y1,x2,y1);
            g.drawLine(x1,y1,x1,y2);
            g.drawLine(x2,y1,x2,y2);
            g.drawLine(x1,y2,x2,y2);

        } else if (shapeType.equals("圆形")) {
            g.drawOval(x1,y1,x2-x1,y2-y1);

        } else if (shapeType.equals("实心圆形")){
            Color c = new Color(100,100,200);
            g.setColor(c);
            g.fillOval(x1,y1,x2-x1,y2-y1);

        } else if (shapeType.equals("等腰三角形")) {
            g.drawLine(x1,y2,x2,y2);
            g.drawLine((x1+x2)/2,y1,x1,y2);
            g.drawLine((x1+x2)/2,y1,x2,y2);

        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值