Java实现简单画画画板

用Java实现简单的画画画板,供大家参考,具体内容如下

一、代码

先直接上代码吧,备注大部分都在代码中。

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.io.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
public class DrawDraw extends JFrame implements ActionListener,MouseListener,MouseMotionListener{
    public static void main(String[] args) {
        new DrawDraw();
    }
    // 属性
    JPanel p0,p1,p2;
    Color color;
    String shape;
    int x1,y1,x2,y2,newx1,newy1,newx2,newy2;
    Graphics2D g;
    BufferedImage img;
    boolean flag;

    DrawDraw(){

    p0 = new JPanel();
    p1 = new JPanel();
    p2 = new JPanel();

    setTitle("画画面板");
    this.setSize(1400,900);
    this.setLocation(100,100);

    // 图形按钮,采用数组的方式添加按钮。好处在更改代码的时候,可以直接添加,十分方便
    String [] Shape={"直线","曲线","圆","喷枪","橡皮擦","矩形","椭圆","圆角矩形","弧线","图形"};   
        for(int i=0;i<Shape.length;i++){
            JButton button=new JButton(Shape[i]);
            button.addActionListener(this);    //添加事件监听机制  类(this)应该是有实现了ActionListener这个接口的吧;
            p0.add(button);
        }

    // 颜色按钮
    Color [] color={Color.BLACK,Color.blue,Color.white,Color.gray,Color.red,Color.CYAN,Color.green,Color.darkGray,Color.pink};
        for(int i=0;i<color.length;i++){
            JButton button=new JButton();
            button.addActionListener(this);     //添加事件监听机制
            button.setPreferredSize(new Dimension(40,40));  // 设置按钮的大小
            button.setBackground(color[i]);     // 设置颜色选择按钮的颜色     
            p2.add(button);
        }

    // 设置背景颜色
    p0.setBackground(Color.gray); 
    p1.setBackground(Color.white);
    p2.setBackground(Color.yellow); 
    // 把p0,p1,p2 上-中-下的方法分配
    this.add(p0,BorderLayout.NORTH);
    this.add(p1,BorderLayout.CENTER);
    this.add(p2,BorderLayout.SOUTH);

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setVisible(true);

    // 注意:这里鼠标移动和鼠标拖动的事件,是作用在p1的面板上面。。。类(this)应该是有实现了MouseListener,MouseMotionListener
    p1.addMouseListener(this);
    p1.addMouseMotionListener(this);

    }

    // 当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。对应ActionListener接口
    public void actionPerformed(ActionEvent e){
        if(e.getActionCommand().equals("")){      //如果没有信息,那就是颜色按钮
            JButton button = (JButton) e.getSource();  // getSource()事件最初发生的对象,
            color = button.getBackground();   
            System.out.println("color = " + color);
        }else{
            JButton button = (JButton) e.getSource();  
            shape = button.getActionCommand();   
            System.out.println("String = " + shape);
        }
    }

     // 当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
     // 在组件上按下鼠标按钮时调用。
     public void mousePressed(MouseEvent e) {
         g=(Graphics2D)p1.getGraphics(); // g = p1.getGraphics();
         g.setColor(color);
         x1=e.getX();  // 返回事件相对于源组件的水平x位置。
         y1=e.getY();
        if(shape.equals("圆")){
             g.drawOval(x1, y1, 30, 30);
         }else if(shape.equals("矩形")){
             g.drawRect(x1, y1, 30, 40);
         }else if(shape.equals("圆角矩形")){
             g.drawRoundRect(x1, y1, 30, 40, 5, 10);
         }else if(shape.equals("椭圆")){
             g.drawOval(x1, y1, 30, 20);
         }else if(shape.equals("弧线")){
             g.drawArc(x1, y1, 100, 80, 10, 180);  //(x,y,宽,高,起始角度,结束角度)
         } // 如果想使用这个图形,下面的new File("这里要添加自己电脑上的图片路径") 
         /*else if (shape.equals("图形")){
             try{
                 img=ImageIO.read(new File("F:\\学习知识\\Java\\画画面板\\imager\\太阳1.bmp"));   
             } 
             catch(IOException e1){
                 System.out.println(e.toString());
             }
             // drawImage绘制当前可用的指定图像的大小。 该图像在其图形上下文的坐标空间中的左上角( x , y ,宽,高)处绘制。
             g.drawImage(img,x1,y1,150,150,null);
             }*/
         System.out.println("x1 = " + x1 +"   y1 = " + y1);
     }

     // 在组件上单击(按下并释放)鼠标按钮时调用。
     public void mouseClicked(MouseEvent e){
     }

     // 当鼠标进入组件时调用。
     public void mouseEntered(MouseEvent e){
     }

     // 当鼠标退出组件时调用。
     public void mouseExited(MouseEvent e){
     } 

     // 松开。搭配前面的按下,就可以画出直线
     public void mouseReleased(MouseEvent e){
         g.setColor(color);
         if(shape.equals("直线")){
             x2 = e.getX();
             y2 = e.getY();
             g.drawLine(x1, y1, x2, y2);   //通过drawLine方法在两个点之间连一条直线(gr是画笔)
         }
     }

     // 在组件上按下鼠标按钮然后拖动时调用。
     public void mouseDragged(MouseEvent e){
            x2 = e.getX();
            y2 = e.getY();
            if (shape.equals("曲线")) {
                g.drawLine(x1, y1, x2, y2);
                x1 = x2;
                y1 = y2;
            }else if(shape.equals("橡皮擦")){
                // Graphics2D中的方法。BasicStroke(float width)--->指的是宽度
                g.setStroke(new BasicStroke(80)); 
                // 好像是渲染,应该就是给涂掉
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
                g.setColor(Color.WHITE);
                g.drawLine(x1, y1, x2, y2);
                x1 = x2;
                y1 = y2;
            }else if(shape.equals("喷枪")){
                for(int k=0;k<20;k++){
                    Random i=new Random();       
                    int a=i.nextInt(8);
                    int b=i.nextInt(10);
                    g.drawLine(x2+a, y2+b, x2+a, y2+b);
                }
            }
     }

     // 当鼠标光标移动到组件上但没有按钮被按下时调用。(就是光标放到上面)
     public void mouseMoved(MouseEvent e) {
     }
}

二、展示效果

强行解释:

左上角的那个太阳是我插入的图片,就是“图形”这个按钮。但是我把上面的代码给注释掉了。各位看官要是想使用“图形”的话可以直接把注释去掉。
其实这个“”图形”还可以改进,搞成点击“图形”之后会专门让你选择想要添加的图片,不过不想搞了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java Swing实现画板的简单操作

    Java Swing 画板的操作(修改颜色,更改图形,清除,任务栏按钮),供大家参考,具体内容如下 话不多说,直接看代码 package Swing; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.awt.image.TileObserver; import java.awt.image.WritableRende

  • JAVA GUI自定义JPanel画板背景

    自定义JPanel面板背景 一.前言 1.GUI全称是Graphical User Interface,就是图形用户界面.JAVA的GUI应用广泛在我们生活中也很常见.很多应用使用该GUI编程设计,像点击QQ图标弹出对应的登录窗体. 一般程序与用户的交互都基于对应程序的运行界面. 2.JPanel面板是SWING下的一个面板容器类.该面板支持嵌套,可设置布局方式,设置不同的布局管理器可添加其他控件像JButton按钮,JTextField文本框等.来设计完善一个程序界面窗体. 作为绘制面板支持s

  • Java版画板的实现方法

    Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现. 基本的思路是这样的:画板实现大致分三部分:一是画板界面的实现,二是画板的监听以及画图的实现,三是画板的重绘.(文章较长,但是代码是逐步递进的,可以按三部分分开来看,实现了当前部分再去看下一部分.)首先是画板的界面实现,因为我没有去找具体的图标,界面上的所有组件都是Swing的自带组件,所以界面略微有点简陋,不过如果想要优化也简单,把界面上的组件都改成自定义的图标即可.界面实现后,就可以考虑给界面的组件加上监听

  • Java实现简单画画画板

    用Java实现简单的画画画板,供大家参考,具体内容如下 一.代码 先直接上代码吧,备注大部分都在代码中. import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; import javax.swing.event.*; import java.io.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage

  • Java实现简单小画板

    Java制作简单画板,包括两个类,一个主要画板类Drawpad,一个画板监听器DrawListener类. 1.Drawpad类,包括画板,画板功能设计,保存图片等 package Java课程设计; import java.awt.Graphics; import javax.imageio.ImageIO; import javax.print.DocFlavor.STRING; import javax.swing.ImageIcon; import javax.swing.JDialog

  • JS实现canvas简单小画板功能

    本文实例为大家分享了JS实现canvas简单小画板的具体代码,供大家参考,具体内容如下 Html部分: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">

  • Android实现简单画图画板

    本文实例为大家分享了Android实现简单画图画板的具体代码,供大家参考,具体内容如下 效果如图: 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:

  • 基于Java实现简单贪吃蛇游戏

    本文实例为大家分享了Java实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 贪吃蛇小游戏制作方法 首先需要的准备有: 1.掌握Java基础知识,即Java SE 2.了解一定的GUI知识 3.自定义的贪吃蛇图片(可以在网上找到) 如果以上三点都没有,也不要紧,完全可以看我之前的博文来进行学习!!!! 学习贪吃蛇的目的 一:了解GUI 对前端的知识进行了解 二:了解监听器的作用 熟练掌握监听器(重点) 三:为枯燥乏味的学习提高兴趣(大重点!!) 贪吃蛇小游戏运行效果 设计思路: 由Game

  • Java实现简单的贪吃蛇游戏

    本文实例为大家分享了Java实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下 代码 启动类 package snake; import javax.swing.*; //游戏的主启动类 public class StartGame { public static void main(String[] args) { JFrame frame = new JFrame("贪吃蛇"); frame.setBounds(10,10,900,720); frame.setResizabl

  • Python3使用PyQt5制作简单的画板/手写板实例

    1.前言 版本:Python3.6.1 + PyQt5 写一个程序的时候需要用到画板/手写板,只需要最简单的那种.原以为网上到处都是,结果找了好几天,都没有找到想要的结果. 网上的要么是非python版的qt程序(要知道qt版本之间差异巨大,还是非同一语言的),改写难度太大.要么是PyQt4的老程序,很多都已经不能在PyQt5上运行了.要么是大神写的特别复杂的程序,简直是直接做出了一个Windows自带的画图版,只能膜拜~ 于是我只能在众多代码中慢慢寻找自己需要的那一小部分,然后不断地拼凑,不断

  • Java Web 简单的分页显示实例代码

    本文通过两个方法:(1)计算总的页数. (2)查询指定页数据,实现简单的分页效果. 思路:首先得在 DAO 对象中提供分页查询的方法,在控制层调用该方法查到指定页的数据,在表示层通过 EL 表达式和 JSTL 将该页数据显示出来. 先给大家展示下效果图: 题外话:该分页显示是用 "表示层-控制层-DAO层-数据库"的设计思想实现的,有什么需要改进的地方大家提出来,共同学习进步.废话不多说了,开始进入主题,详细步骤如下所示: 1.DAO层-数据库 JDBCUtils 类用于打开和关闭数据

  • LIS 最长递增子序列 Java的简单实现

    今天遇到了一个求最长递增子序列的问题,看了之后就尝试着用Java实现了一下,关于什么是最长递增子序列,这里就不在赘述,可以百度或者Google之,以下为实现的代码: 说明:本段代码实现的功能为 (1)随机生成一个有10个元素的数组,然后输出它的最长递增子序列 (2)输出以其中某一个元素为结尾的最长递增子序列的长度 具体的实现思路在注释中已经详细表明了,比较简单,这里就不再赘述 import java.util.Arrays; import java.util.Random; public cla

  • java实现简单解析XML文件功能示例

    本文实例讲述了java实现简单解析XML文件功能.分享给大家供大家参考,具体如下: package demo; import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException;

随机推荐