⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawshapeframe.java

📁 自己写的一个Java画图板程序 支持鼠标拖动图形 选中图形 改变颜色等 推荐使用Eclipse来运行
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package project;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;

import javax.swing.Box;
import javax.swing.BoxLayout;

import javax.swing.ImageIcon;

import javax.swing.JColorChooser;
import javax.swing.JFileChooser;
import javax.swing.JFrame;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

import javax.swing.JPanel;
import javax.swing.filechooser.FileFilter;
import javax.swing.plaf.basic.BasicBorders;

//负责程序的主框架
public class DrawShapeFrame extends JFrame implements MouseListener,
		MouseMotionListener, ActionListener {
	
	private static final long serialVersionUID = 757399200588801200L;

	
	DrawShapePanel drawShapePanel = new DrawShapePanel();

	JPanel westPanel = new JPanel();

	FastButtonGroup fastButtonGroup = new FastButtonGroup();
	
	
	FastButton selectToolButton = new FastButton(new ImageIcon("icon/select.jpg"), new ImageIcon("icon/selectSelected.jpg"), fastButtonGroup);
	
	FastButton drawLineButton = new FastButton(new ImageIcon("icon/line.jpg"), new ImageIcon("icon/lineSelected.jpg"), fastButtonGroup);
	
	FastButton drawRectangleButton = new FastButton(new ImageIcon("icon/rectangle.jpg"), new ImageIcon("icon/rectangleSelected.jpg"), fastButtonGroup);
	
	FastButton drawOvalButton = new FastButton(new ImageIcon("icon/oval.jpg"), new ImageIcon("icon/ovalSelected.jpg"), fastButtonGroup);
	
	
	FastButton borderColorButton = new FastButton(new ImageIcon("icon/borderColor.jpg"), new ImageIcon("icon/borderColorSelected.jpg"), fastButtonGroup);
	
	FastButton fillColorButton = new FastButton(new ImageIcon("icon/fillColor.jpg"), new ImageIcon("icon/fillColorSelected.jpg"), fastButtonGroup);
	
	
	
	
	
	
	SingleButton undoButton = new SingleButton(new ImageIcon("icon/undo.jpg"), new ImageIcon("icon/undoPressed.jpg"));
	
	SingleButton redoButton = new SingleButton(new ImageIcon("icon/redo.jpg"), new ImageIcon("icon/redoPressed.jpg"));
	
	
	
	

	
	
	
	
	
	SingleButton compositeButton = new SingleButton(new ImageIcon("icon/composite.jpg"), new ImageIcon("icon/compositeSelected.jpg"));

	SingleButton apartButton = new SingleButton(new ImageIcon("icon/apart.jpg"), new ImageIcon("icon/apartSelected.jpg"));


	
	
	SingleButton colorButton = new SingleButton(null, null);
	
	
	
	
	
	
	
	
	
	
	
	
	JMenuBar menuBar = new JMenuBar();

	JMenu menu = new JMenu("File");

	JMenuItem saveFile = new JMenuItem("Save");

	JMenuItem loadFile = new JMenuItem("Load");
	
	JMenu menuEdit = new JMenu("Edit");

	JMenuItem undo = new JMenuItem("Undo");

	JMenuItem redo = new JMenuItem("Redo");
	

	//构造函数,将面板,菜单装配起来
	public DrawShapeFrame() {
		
		getContentPane().setLayout(new BorderLayout());

		
		drawShapePanel.setBorder(new BasicBorders.FieldBorder(Color.GRAY, Color.GRAY, Color.GRAY, Color.GRAY));
		getContentPane().add(drawShapePanel, BorderLayout.CENTER);
		drawShapePanel.addMouseListener(this);
		drawShapePanel.addMouseMotionListener(this);

		

		
		getContentPane().add(westPanel, BorderLayout.WEST);
		
		
		
		
		westPanel.setLayout(new BoxLayout(westPanel, BoxLayout.Y_AXIS));
		
		
		
		westPanel.add(Box.createVerticalStrut(20));	
		
		
		westPanel.add(selectToolButton);
		selectToolButton.setToolTipText("Select Tool");
		selectToolButton.addActionListener(this);
		
		
		
		westPanel.add(drawLineButton);
		drawLineButton.setToolTipText("Line");
		drawLineButton.addActionListener(this);
		
		
		
		
		westPanel.add(drawRectangleButton);
		drawRectangleButton.setToolTipText("Rectangle");
		drawRectangleButton.addActionListener(this);
		
		
		
		westPanel.add(drawOvalButton);
		drawOvalButton.setToolTipText("Oval");
		drawOvalButton.addActionListener(this);
		
		
		
		
		westPanel.add(borderColorButton);
		borderColorButton.setToolTipText("Border Color");
		borderColorButton.addActionListener(this);
		
		
		westPanel.add(fillColorButton);
		fillColorButton.setToolTipText("Fill Color");
		fillColorButton.addActionListener(this);
		
		

		
		
		
		westPanel.add(Box.createVerticalStrut(60));	
		
		westPanel.add(compositeButton);
		compositeButton.setToolTipText("Composite");
		compositeButton.addActionListener(this);
		
		
		westPanel.add(apartButton);
		apartButton.setToolTipText("Apart");
		apartButton.addActionListener(this);
		
		
		
		
		
		
		westPanel.add(Box.createVerticalStrut(20));	
		
		
		westPanel.add(colorButton);
		colorButton.setBackground(drawShapePanel.currentColor);
		colorButton.setToolTipText("Color");
		colorButton.addActionListener(this);
		
		
		
		
		
		westPanel.add(Box.createRigidArea(new Dimension(20, 20)));
		westPanel.add(undoButton);
		westPanel.add(redoButton);
		
		
		undoButton.setEnabled(false);
		redoButton.setEnabled(false);
		
		
		
		undoButton.addActionListener(this);
		redoButton.addActionListener(this);
		
		

		
		
		
		
		this.setJMenuBar(menuBar);

		menuBar.add(menu);

		menu.add(saveFile);
		saveFile.addActionListener(this);

		menu.add(loadFile);
		loadFile.addActionListener(this);
		
		
		menuBar.add(menuEdit);

		menuEdit.add(undo);
		undo.setEnabled(false);
		undo.addActionListener(this);

		menuEdit.add(redo);
		redo.setEnabled(false);
		redo.addActionListener(this);

		setTitle("Draw Shape Frame");
		setSize(800, 600);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		setVisible(true);
	}

	//鼠标点击时,在边框颜色和填充颜色模式下,对选中的图形进行更改颜色
	public void mouseClicked(MouseEvent e) {
		
		if(drawShapePanel.isBorderColorOn)
		{
			for (Shape shape : drawShapePanel.shapeArrayList) {

				if (shape.isInShape(e.getX(), e.getY())) {
					shape.setBorderColor(drawShapePanel.currentColor);
					
					
				}

			}	
	
		}
		
		else if(drawShapePanel.isFillColorOn)
		{
			for (Shape shape : drawShapePanel.shapeArrayList) {

				if (shape.isInShape(e.getX(), e.getY())) {
					shape.setFillColor(drawShapePanel.currentColor);
					
					
				}

			}	
	
		}
		
		
		
		
	}

	public void mouseEntered(MouseEvent e) {

	}

	public void mouseExited(MouseEvent e) {

	}

	//鼠标按下时,记录鼠标起点mouseOriginalPoint
	//对于所有图形,每个图形记录自己的起点
	
	//状态控制
	//如果鼠标选中某个图形,则isMoving设为true
	//如果鼠标未选中图形, 则isSelecting设为true
	public void mousePressed(MouseEvent e) {

		
		
		drawShapePanel.isDone = false;
		
		
		
		drawShapePanel.mouseOriginalPoint.x = e.getX();
		drawShapePanel.mouseOriginalPoint.y = e.getY();
		
	
		for (Shape shape : drawShapePanel.shapeArrayList) {

			
			shape.setOriginalX(shape.getX());
			shape.setOriginalY(shape.getY());

			
			if (shape.getIsSelected() && shape.isInShape(e.getX(), e.getY())) {
				
				
				drawShapePanel.isMoving = true;
				
			}
			

		}	
		
		if(drawShapePanel.isMoving)
		{
			drawShapePanel.isSelecting = false;
		}
		else
		{
			drawShapePanel.isSelecting = true;
		}
		
		
		

	}

	//鼠标放开时,记录鼠标终点mouseEndPoint
	
	//如果是画直线模式,则执行画直线命令,该命令会把直线添加到drawShapePanel.shapeArrayList中
	//如果是画矩形模式,则执行画矩形命令,该命令会把矩形添加到drawShapePanel.shapeArrayList中
	//如果是画椭圆模式,则执行画椭圆命令,该命令会把椭圆添加到drawShapePanel.shapeArrayList中
	
	public void mouseReleased(MouseEvent e) {
		
		drawShapePanel.isDone = true;
		
		drawShapePanel.isMoving = false;
		
		
		
		for (Shape shape : drawShapePanel.shapeArrayList) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -