java画图板 (部分功能未实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lpeaceminusone/article/details/82966737

主类 

package draw;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Draw extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JPanel bJpanel,cJpanel,jpanel;
	private Drawlistener Listener;
	private Graphics g;
	Draw(){
		super("DRAW");
		init();
	}
	public void init() {
		String name[]= {
				"画直线", "画椭圆", "画曲线", "多边形", 
                "橡皮擦", "三角形", "画球形", "笔刷", "喷枪", 
                "立体矩形", "立体圆", "立体三角",
                 "枫叶", "画树","画字符", "清空",
                "矩形","五角星","多线","字符"
		};
		Color[] colorArray = { 
				Color.BLACK,Color.DARK_GRAY,Color.GRAY,
				Color.BLUE, new Color(138,43,226),new Color(148,0,211),
				new Color(139,0,139),new Color(75,0,130),new Color(106,90,205),
				new Color(25,25,112),new Color(30,144,255),new Color(100,149,237),
				new Color(135,206,235),new Color(175,238,238),new Color(0,128,128),
				new Color(32,178,170),Color.CYAN,Color.GREEN,
				Color.MAGENTA,new Color(220,20,60), Color.RED,
				new Color(210,105,30),Color.ORANGE,Color.YELLOW,
                new Color(240,128,128),Color.PINK,new Color(255,192,203),
                new Color(255,240,245), new Color(240,255,240),Color.WHITE,
                };
		Listener = new Drawlistener();
		bJpanel = new JPanel();
		bJpanel.setBackground(Color.WHITE);
		bJpanel.setLayout(new GridLayout(10,2,6,10));
		bJpanel.setPreferredSize(new Dimension(200,500));
		bJpanel.setBorder(BorderFactory.createLineBorder(Color.white,3));
		for(int i=0;i<name.length;i++) {
			JButton but = new JButton (name[i]);
			but.addActionListener(Listener);
			but.setBackground(Color.GRAY);
			but.setBorderPainted(false);
			but.setFont(new Font("黑体",Font.PLAIN,14));
			but.setForeground(Color.white);
			bJpanel.add(but);
		}
		cJpanel = new JPanel();
		cJpanel.setLayout(new GridLayout(1,colorArray.length,0,0));
		for(int i=0;i<colorArray.length;i++) {
			JButton but = new JButton ();
			but.addActionListener(Listener);
			but.setBackground(colorArray[i]);
			but.setPreferredSize(new Dimension(30,200));
			cJpanel.add(but);
		}
		jpanel = new JPanel();
		jpanel.setBackground(Color.white);
		jpanel.setBorder(BorderFactory.createLineBorder(Color.white,3));
		jpanel.setPreferredSize(new Dimension(950,500));
		
		JButton butt = new JButton ();
		butt.setBackground(Color.white);
		butt.setPreferredSize(new Dimension(250,200));
		butt.setBorder(BorderFactory.createLineBorder(Color.GRAY,1));
		this.setVisible(true);
		
		this.setSize(1200,725);
		this.setLayout(new FlowLayout());
		setDefaultCloseOperation(3);
		this.add(bJpanel);
		this.add(jpanel);
		this.add(cJpanel);
		this.add(butt);
		g=jpanel.getGraphics();
		Listener.setg(g);
		Listener.setNowcolor(butt);
		Listener.setjp(jpanel,Color.WHITE);
		jpanel.addMouseListener(Listener);
		jpanel.addMouseMotionListener(Listener);
		this.setBackground(Color.BLACK);
		setLocationRelativeTo(null);
		this.setResizable(false);
		
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Draw();
	}
}

 Drawlistener 类

package draw;

import java.awt.*;
import java.awt.event.*;

import javax.swing.JButton;
import javax.swing.JPanel;
public class Drawlistener implements MouseListener,
					ActionListener,	MouseMotionListener{
	private Color color;
	private JPanel jpanel;
	private Graphics2D g;
	private JButton but;
	private String str;
	private int x1,y1,x2,y2;
	public void setjp(JPanel jpanel,Color c) {
		this.jpanel=jpanel;
	}
	public void setg(Graphics g) {
		this.g=(Graphics2D)g;
		this.g.setStroke(new BasicStroke(3.0f));
	}
	
	public void setNowcolor(JButton butt) {
		this.but = butt;
	}
	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		if ("画曲线".equals(str)) {
            int x, y;
            x = e.getX();
            y = e.getY();
            g.drawLine(x, y, x1, y1);
            x1 = x;
            y1 = y;
        }
		if ("橡皮擦".equals(str)) {
            int x, y;
            x = e.getX();
            y = e.getY();
            g.setColor(Color.WHITE);
            g.fillRect(x, y, 10, 10);
            x1 = x;
            y1 = y;
        }
	}
	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		 if ("".equals(e.getActionCommand())) {
	            JButton jb = (JButton) e.getSource();
	            color = jb.getBackground();
	            but.setBackground(color);//处理当前颜色
	        } else {
	            if(e.getActionCommand().equals("清空")){
	            	jpanel.repaint();
	            }
	            else 
	            	str = e.getActionCommand();
	        }
	}
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
	}
	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		 g.setColor(color);
	        x1=e.getX();
	        y1=e.getY();
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		 	x2=e.getX();
	        y2=e.getY();
	        if ("画直线".equals(str)) {
	            g.drawLine(x1, y1, x2, y2);
	        }
	        if ("立体矩形".equals(str)) {
	        	g.draw3DRect(x1,y1,(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)),(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)),true);
	        }
	        if ("画椭圆".equals(str)) {
	        	g.drawOval(x1,y1,(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)),(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))/2);
	        }
	        if ("立体圆".equals(str)) {
	        	g.drawOval(x1,y1,(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)),(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
	        }
	        if ("矩形".equals(str)) {
	        	g.drawRect(x1,y1,(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)),(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
	        }
	        if ("三角形".equals(str)||"立体三角".equals(str)) {
	        	int mx=(int)((x1+x2)/2);
	        	int x[]= {mx,Math.max(x1,x2),Math.min(x1,x2)};
	        	int y[]= {Math.min(y1,y2),Math.max(y1,y2),Math.max(y1,y2)};
	        	g.drawPolygon(x,y,3);
	        }
	        if ("五角星".equals(str)) {
	        	int x[],y[],x_[],y_[];
	        	x=new int[10];y=new int[10];x_=new int[10];y_=new int[10];
	        	int c = 360 / 5; // 角度
	        	int r=(int)Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))/2;
	        	for (int i = 0; i < 5; i++) {
	        	x[i] = (int) (Math.cos(i * c * Math.PI / 30 - Math.PI / 2) * (r) + r);
	        	y[i] = (int) (Math.sin(i * c * Math.PI / 30 - Math.PI / 2) * (r) + r);
	        	}
	        	int r_ = (int) (r * Math.sin(18 * Math.PI / 180) / Math
	        	.sin(126 * Math.PI / 180)); // 内顶点外接圆半径
	        	for (int i = 0; i < 5; i++) {
	        	x_[i] = (int) (Math.cos((i * c + 18) * Math.PI / 30 - Math.PI / 2)
	        	* (r_) + r);
	        	y_[i] = (int) (Math.sin((i * c + 18) * Math.PI / 30 - Math.PI / 2)
	        	* (r_) + r);
	        	}
	        	int[] x1 = { x[0], x[2], x_[2] };
	        	int[] y1 = { y[0], y[2], y_[2] };
	        	int[] x2 = { x[1], x[3], x_[3] };
	        	int[] y2 = { y[1], y[3], y_[3] };
	        	int[] x3 = { x[2], x[4], x_[4] };
	        	int[] y3 = { y[2], y[4], y_[4] };
	        	g.drawPolygon(x1, y1, 3);
	        	g.drawPolygon(x2, y2, 3);
	        	g.drawPolygon(x3, y3, 3);
	        }
	}
	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
	}
	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
	}
}

猜你喜欢

转载自blog.csdn.net/lpeaceminusone/article/details/82966737