Java swing JFrame窗口程序实现绘图(2)

本文介绍了一个使用Java Swing编写的简单绘图程序,用户可以通过鼠标交互式地绘制直线和矩形。程序通过监听鼠标事件,记录起点和终点,实现在窗口上的绘制。同时,支持矩形的拉伸和移动。代码中包含了MouseListener和MouseMotionListener的实现,用于处理鼠标按下、释放、拖动等操作。
摘要由CSDN通过智能技术生成

上次写了一个可以跟随鼠标移动的代码,但是存在很多的bug  这次通过精简,实现了可移动划线的代码。通过调用父类的paint()方法可以实现清除路迹,然后通过Point()类数组来记录鼠标每次的按下以及抬起的位置,每次重绘之前的线段。除此之外还按照同理实现了矩形的跟随鼠标拉伸。之后会继续完善绘图程序。不多说了直接上代码。

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mypaint;


import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.List;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import javax.swing.JColorChooser;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;


/**
 *
 * @author Asus
 */
public class NewJFrame extends JFrame implements MouseListener,MouseMotionListener{
    public Color color=new Color(0,0,0);
    public static int flag=0,flag2=0,total=0,total1=0;
    public static int startx,starty,endx,endy,x,y;
    public Point []ps=new Point[1000];//直线数组
    public Point []ps1=new Point[1000];//矩形数组
    //public Point []ps2=new Point[1000];
    


    @Override
    public void paint(Graphics g) {
        super.paint(g); //To change body of generated methods, choose Tools | Templates.
        g.setColor(color);
       if(flag==1)
       {
         if(total!=0)
            for(int i=0;i<total-1;i=i+2)
             {
            //System.out.println(ps[i].x+"+"+ps[i].y);
                  g.drawLine(ps[i].x, ps[i].y, ps[i+1].x, ps[i+1].y);
          
             }
          if(total1!=0)
            for(int i=0;i<total1-1;i=i+2)
             {
            //System.out.println(ps[i].x+"+"+ps[i].y);
                  g.drawRect(ps1[i].x, ps1[i].y, Math.abs(ps1[i].x-ps1[i+1].x), Math.abs(ps1[i].y-ps1[i+1].y));
          
             }
        g.drawLine(startx, starty, endx, endy);
       }else if(flag==2){
           if(total!=0)
            for(int i=0;i<total-1;i=i+2)
             {
            //System.out.println(ps[i].x+"+"+ps[i].y);
                  g.drawLine(ps[i].x, ps[i].y, ps[i+1].x, ps[i+1].y);
          
             }
           if(total1!=0)
            for(int i=0;i<total1-1;i=i+2)
             {
            //System.out.println(ps[i].x+"+"+ps[i].y);
                  g.drawRect(ps1[i].x, ps1[i].y, Math.abs(ps1[i].x-ps1[i+1].x), Math.abs(ps1[i].y-ps1[i+1].y));
          
             }
           g.drawRect(startx, starty,Math.abs(startx-endx) ,Math.abs(starty-endy));
       }
    }
    
    /**
     * Creates new form NewJFrame
     */
    public NewJFrame() {
        initComponents();
        this.addMouseListener(this);
        this.addMouseMotionListener(this);
    }
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值