用Java做一个简单的画图板

一、创立画图板主界面

import javax.swing.*;
import java.awt.*;
import java.util.concurrent.Flow;

public class drawPad {
    public void showUI() {
        JFrame jf = new JFrame();//创立界面
        jf.setTitle("画图板");//给界面标题
        jf.setSize(800, 800);//设置大小
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭方式
        jf.setVisible(true);//可视化操作
        FlowLayout flow=new FlowLayout();
        jf.setLayout(flow);//流式布局管理

        JButton btnLine=new JButton("直线");
        JButton btnRect=new JButton("矩形");
        JButton btnOval=new JButton("圆形");
        JButton btnIT=new JButton("等腰三角形");
        JButton btnTri=new JButton("三角形");
        JButton btnPolygon=new JButton("多边形");
        //创建各类想要画出的图形的按钮

        jf.add(btnLine);
        jf.add(btnRect);
        jf.add(btnOval);
        jf.add(btnIT);
        jf.add(btnTri);
        jf.add(btnPolygon);
        //将按钮加到界面中

        jf.setVisible(true);

        drawline drawl = new drawline();//为drawline类创建一个对象
        jf.addMouseListener(drawl);

        btnLine.addActionListener(drawl);
        btnRect.addActionListener(drawl);
        btnOval.addActionListener(drawl);
        btnIT.addActionListener(drawl);
        btnTri.addActionListener(drawl);
        btnPolygon.addActionListener(drawl);
        //将所有按钮添加drawl的动作监听器功能

        Graphics g1=jf.getGraphics();//在此类中创立一个图像以显示
        drawl.g2=g1;//将在drawline中形成的图像给到g1
        System.out.println(g1);


    }
    public static void main(String[]args){
        drawPad drawpad=new drawPad();
        drawpad.showUI();
    }
}

二、实现各类图形的显示

package com.drawline;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


//创建draw类并为其赋予鼠标监听器和动作监听器的功能
public class drawline implements MouseListener,ActionListener {

  Graphics g2;
  int x1,y1,x2,y2;
  String shapeType="直线";//初始化获取的文本
    @Override
    public void actionPerformed(ActionEvent e) {
       String btnStr=e.getActionCommand();
       shapeType=btnStr;
    }//获取用户所点击按钮上的文字

    int x3,y3,x4,y4,x5,y5;
    int count=0;

    @Override
    //鼠标监听器
    public void mouseClicked(MouseEvent e) {

        int x = e.getX ();
        int y = e.getY ();
        //获取鼠标点击处的位置坐标
        if(shapeType.equals ("三角形")){
            g2.fillOval (x -2, y -2, 5, 5);//显示一个实心小圆点当作三角形顶点
            if(count == 0){
                x3 = x;
                y3 = y;
                count++;
            }//第一个点
            else if(count == 1){
                x4 = x;
                y4 = y;
                g2.drawLine (x3, y3, x4, y4);
                count++;
            }//第二个点
            else if(count == 2){
                x5 = x;
                y5 = y;
                g2.drawLine (x3, y3, x5, y5);
                g2.drawLine (x5, y5, x4, y4);
                count = 0;
            }
        } else if(shapeType.equals ("多边形")){
            g2.fillOval (x - 2, y - 2, 5, 5);
            if(count == 0){
                x3 = x;
                y3 = y;
                count++;
            } else if(count == 1){
                x4 = x;
                y4 = y;
                g2.drawLine (x3, y3, x4, y4);
                count++;
            } else if(count == 2){
                x5 = x;
                y5 = y;
                g2.drawLine (x5, y5, x4, y4);
                x4 = x5;
                y4 = y5;
                count = 2;
                if(e.getButton () == 3){// 鼠标右键点击
                    g2.drawLine (x3, y3, x5, y5);
                    count = 0;
                }
            }
        }

    }
   //三角形和多边形的实现方式时依靠鼠标点击成点,连点为线。
    @Override
    public void mousePressed(MouseEvent e) {
      int x=e.getX();
      int y=e.getY();
      x1=x;
      y1=y;
    }

    @Override
    public void mouseReleased(MouseEvent e) {

        int x=e.getX();
      int y=e.getY();
      x2=x;
      y2=y;
        if(shapeType.equals ("直线")){
            g2.drawLine (x1, y1, x2, y2);
        } else if(shapeType.equals ("矩形")){
// 矩形左上角的坐标 宽度 高度
            g2.drawRect (x1, y1, x2 - x1, y2 - y1);
        } else if(shapeType.equals ("圆形")){
// 圆的外切矩形左上角的坐标 宽度 高度
            g2.drawOval (x1, y1, x2 - x1, y2 - y1);
        } else if(shapeType.equals ("等腰三角形")){
            int xt = (x1 + x2) / 2;
            int yt = y1;
            g2.drawLine (xt, yt, x1, y2);
            g2.drawLine (xt, yt, x2, y2);
            g2.drawLine (x2, y2, x1, y2);
        }
    }
//直线、矩形、圆形、等腰三角形的实现依靠鼠标的按压和拖拽
  @Override
  public void mouseEntered(MouseEvent e) {

  }

  @Override
  public void mouseExited(MouseEvent e) {


  }


}
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 画板UI设计(总体布局) (1)创建窗体并设置相关属性; (2)给整个窗体添加一个中间容器用来覆盖整个窗体; (3)设置边框布局,因为整个画板大致为左边部分,中间部分,菜单栏三个部分,用边框布局比较合适; (4)给窗体添加左面板,中间面板; (5)给左面板添加按钮,并设置按钮图片和效果; (6)给左面板添加左子面板,用来存放颜色按钮; 2.画板功能设计 (1)给左画板中的按钮组中的每个按钮添加鼠标监听器; (2)点击不同按钮,绘制不同的图形; (3)给左子面板中的每个颜色按钮添加鼠标监听器; (4)根据下面板中选中的颜色按钮,来获取按钮的背景颜色,并将该颜色设置成画笔的颜色; (5)铅笔功能 1、铅笔是鼠标拖动时画的线,所需要实现鼠标移动监听器,我们采用一个类来实现多个接口; 2、添加新的鼠标监听器类; 3、在鼠标移动时间中实现画笔的逻辑(其实就是绘制直线,鼠标每移动一个像素,就会触发移动事件,通过移动事件获取鼠标的坐标,与上一次移动的坐标连线就可以了; (6)刷子功能 刷子其实就是加粗的画笔,画出来的直线更粗,这里需要用到Graphic2D画笔来设置画笔的粗细。 (7)橡皮擦功能 橡皮擦就是把画笔颜色设置成相同的背景颜色就可以了,拖动鼠标时进行擦除,所以在鼠标拖动事件中编写。 (8)喷桶功能 1、定位方法:鼠标拖动事件实现; 2、随机数生成:Random; 3、实现原理,在鼠标拖动附近绘制很多的原点; 3. 画板的保存和重绘的设计 (1)给我们的画板添加菜单条、菜单以及菜单项 (2)给每个菜单项添加监听器 (3)点击不同的菜单项实现相应的功能 (4)图形保存功能:利用对象输出流,将容器对象写入文件; (5)打开图形功能:利用对象输入流,将容器对象读入,然后将容器里面的图形对象在画板上绘制出来 (6)新建文件功能:新建文件,将画板上绘制的内容清空(清空之前可以确认是否需要进行保存)清屏(重绘)功能依次方法; (7)文件保存格式为BMP格式; (8)文字功能:读取文本框中的文本并打印到屏幕鼠标的相应的响应位置,传入输入的文字大小的参数,以此来改变文字的大小; 4.弹泡泡功能的设计 根据Java多线程来实现弹泡泡功能;泡泡的位置颜色随机出现,并且到碰到边框会变色;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值