📄 drawshapeframe.java
字号:
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 + -