Java实现简易画图板

 更新时间:2022年01月11日 07:37:27   作者:Benjamin.  
这篇文章主要为大家详细介绍了Java实现简易画图板,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现简易画图板的具体代码,供大家参考,具体内容如下

这是Windows系统自带的画图板,我们就是模仿着用Java去写一个简易版的画图板。

效果图

图中的四个颜色按钮是可以配合要画的图形而改变线条颜色的,而且每次打开颜色按钮的颜色都是随机的。目前画图什么的都没什么问题,只是一些细节没有去完全修复了,但不影响使用,再加上近段时间有点太忙,就没有去完善相关细节了,有兴趣的小伙伴可以评论区帮忙提出指正意见哈。

画图板UI界面代码

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.Graphics;
import java.util.Random;

public class DrawGraphics {
    Random rand=new Random();
     public static void main(String []args){
        DrawGraphics draw=new DrawGraphics();
        draw.displayUI();
     }
    public JButton getButton(String s,DrawListener dl,boolean flag){
        JButton btn=new JButton();
        //每个按钮的尺寸
        Dimension dim=new Dimension(200,50);
        //如果flag为true,创建文字按钮,否则创建颜色按钮
        if(flag){
            btn=new JButton(s);
        }
        else{
            Color c= new Color(rand.nextInt(256),rand.nextInt(256),rand.nextInt(256));
            btn.setBackground(c);
        }
        btn.setPreferredSize(dim);
        btn.addActionListener(dl);
        return btn;
    }
    
    public void displayUI(){
        JFrame frame=new JFrame();
        FlowLayout f1=new FlowLayout();
        
        frame.setTitle("画图板");
        frame.setSize(1000,1000);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setLayout(f1);
        frame.setResizable(false);
        
        DrawListener dl=new DrawListener();
        
        String []name={"直线","矩形","圆","三角形"};
        for(int i=0;i<name.length;i++){
            
            frame.add(getButton(name[i],dl,true));
        }
        for(int i=0;i<name.length;i++){
            frame.add(getButton("",dl,false));
        }
        
        frame.addMouseListener(dl);
        frame.setVisible(true);
        // 获取画笔 --- 必须要放在 可视化之后
        Graphics g=frame.getGraphics();
        dl.g=g;
        dl.btnstr=name[0];
        dl.name=name;
        
    }
}

画图板UI监听器代码

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;

import java.awt.Color;
import java.awt.Graphics;

public class DrawListener implements MouseListener,ActionListener{

    Graphics g;
    int x1,x2,y1,y2;
    int x3,x4,x5,y3,y4,y5;
    int count=0;
    String []name;
    String btnstr;
    
    int i;
    @Override
    public void actionPerformed(ActionEvent e) {
        btnstr=e.getActionCommand();
        if(btnstr.equals("")){
            JButton btn=(JButton)e.getSource();
            Color btnColor=btn.getBackground();
            g.setColor(btnColor);
        }
        else {
            for(i=0;i<name.length;i++){
                if(btnstr.equals(name[i]))break;
            }    
        }
                
    }
    
    @Override
    public void mouseClicked(MouseEvent e) {
        if(btnstr.equals(name[3])||btnstr.equals("")){
        g.drawOval(e.getX()-4, e.getY()-4, 8, 8);
        if(count==0){
            x3=e.getX();
            y3=e.getY();
            count++;
        }
        else if(count==1){
            x4=e.getX();
            y4=e.getY();
            g.drawLine(x3, y3, x4, y4);
            count++;
        }
        else if(count==2){
            x5=e.getX();
            y5=e.getY();
            g.drawLine(x3, y3, x5, y5);
            g.drawLine(x4, y4, x5, y5);
            count=0;
        }
        }        
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        x1=e.getX();
        y1=e.getY();
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        
        x2=e.getX();
        y2=e.getY();
        if(btnstr.equals(name[0])||btnstr.equals("")){
            g.drawLine(x1, y1, x2, y2);
        }
        else if(btnstr.equals(name[1])||btnstr.equals("")){
            g.drawRect(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2));
        }
        else if(btnstr.equals(name[2])||btnstr.equals("")){

            g.drawOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y1-y2));
        }
        
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }
       
}

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

相关文章

  • java实现文件切片和合并的代码示例

    java实现文件切片和合并的代码示例

    这篇文章主要介绍了java实现文件切片和合并的代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • java实现简易飞机大战

    java实现简易飞机大战

    这篇文章主要为大家详细介绍了java实现简易飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • spring中JdbcTemplate操作oracle的存储过程实例代码

    spring中JdbcTemplate操作oracle的存储过程实例代码

    JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用,JdbcTemplate是Spring的一部分,下面这篇文章主要给大家介绍了关于spring中JdbcTemplate操作oracle的存储过程的相关资料,需要的朋友可以参考下
    2023-04-04
  • 使用feign发送http请求解析报错的问题

    使用feign发送http请求解析报错的问题

    这篇文章主要介绍了使用feign发送http请求解析报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • MyBatis写入Json字段以及Json字段转对象示例详解

    MyBatis写入Json字段以及Json字段转对象示例详解

    这篇文章主要给大家介绍了关于MyBatis写入Json字段以及Json字段转对象的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Java中List for循环的6种写法总结(推荐)

    Java中List for循环的6种写法总结(推荐)

    下面小编就为大家带来一篇Java中List for循环的6种写法总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • 如何自定义feign调用实现hystrix超时、异常熔断

    如何自定义feign调用实现hystrix超时、异常熔断

    这篇文章主要介绍了自定义feign调用实现hystrix超时、异常熔断的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Spring Boot2配置Swagger2生成API接口文档详情

    Spring Boot2配置Swagger2生成API接口文档详情

    这篇文章主要介绍了Spring Boot2配置Swagger2生成API接口文档详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • 详解MyBatis日志如何做到兼容所有常用的日志框架

    详解MyBatis日志如何做到兼容所有常用的日志框架

    这篇文章主要介绍了详解MyBatis日志如何做到兼容所有常用的日志框架,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 简述Springboot @Async 异步方法

    简述Springboot @Async 异步方法

    这篇文章主要介绍了Springboot @Async 异步方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-05-05

最新评论