📄 paintbrush.java
字号:
/**
* @author Groupmembers
* @version 1
* @since 1.4
* @see java.awt.*
** 这是一个简单的画图工具
*/
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Stack;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.filechooser.FileFilter;
import javax.swing.*;
public class PaintBrush extends JFrame implements ActionListener {
/**
* 窗口宽度
*/
public static final int WIDTH = 800;
/**
* 窗口高度
*/
public static final int HEIGHT = 600;
private Graphics2D img_g2d;
private BufferedImage img;
private JInternalFrame frame;// 子窗口
private final String fontNames[] = { "宋体", "隶书", "华文彩云", "仿宋_GB2312",
"华文行楷", "方正舒体", "Times New Roman", "Serif", "Monospaced",
"SonsSerif ", "Garamond" };// 定义字体
private final String fontMetrics[] = { "10", "12", "18", "24", "36", "48",
"72" };// 字体大小
private final String lineSizes[] = { "1", "3", "5", "8" };
private final String nation[] = { "CHINESE_GB2312", "西方" };// 字体说明
private JComboBox fontl, metric, countrys;// 设置字体的组合框
private JCheckBox bold, italic;// 字体效果
private int valBold = Font.PLAIN;
private int valItalic = Font.PLAIN;
private int currentChoice = 5;// 设置初始事件为橡皮擦
private int index = 0, undoIndex = 0;
private int[] undoStep = new int[1000];// 保存撤销步骤
private String font;
private int R, G, B;
private Color color = Color.BLACK;// 设置初始颜色为黑色
private float stroke1 = 1.0f, stroke2;
private int start_x, start_y, end_x, end_y, px, py;
private JRadioButton normalRadioButton, emptyRadioButton, solidRadioButton;
private JComboBox size;
private JLabel tip, coordinate, information, plain;
private JButton penButton, brushButton, eraserButton, sprayButton,
characterButton;// 简单画图按钮
private JButton lineButton, rectangleButton, polygonButton, ellipseButton,
roundrectangleButton;// 几何画图按钮
private JButton blackButton, whiteButton, redButton, greenButton,
blueButton, otherButton;// 颜色选择按钮
private Drawings[] itemList = new Drawings[5000];// 保存点的数组
private MyPanel drawArea = new MyPanel();
// protected UndoManager undo = new UndoManager();
private JPanel statusBar;
private JToolBar colorBar, toolBar, fontBar;// 工具条
private JMenu fileMenu, editMenu, colorMenu, viewMenu, helpMenu;// 菜单栏
private JMenuItem newItem, openItem, saveItem, exitItem;// 文件菜单项
private JMenuItem undoItem, redoItem, addItem, editcolorItem;// 编辑菜单项
private JMenuItem toolItem, colorBoxItem, textEditItem, stateItem;// 查看菜单项
private JMenuItem helpItem, aboutItem;// 帮助菜单项
private JDesktopPane theDesktop;
private int inframeNum = 0;// 子窗口数目
private JPopupMenu popupMenu;// 弹出菜单
private JMenuItem pUndoItem, pSaveItem, pToolItem, pColorBoxItem,
pTextEditItem, pAddItem, pStateItem;// 弹出菜单项
int[] xpoint = new int[20];
int[] ypoint = new int[20];
java.awt.Polygon polygon = new java.awt.Polygon();
int length = 0;
/**
* author 赵磊, 颜钟敏,胡如兴<br>
* version 1.0 07-6-1<br>
* author 周新飞<br>
* version 2.0 07-6-10<br>
* 功能:构造函数主要完成对接面的设计及一些简单的事件处理
*/
public PaintBrush() {
super(" 画图 ");
Container container = getContentPane();
BorderLayout borderLayout = new BorderLayout(2, 2);
container.setLayout(borderLayout);
container.setBackground(Color.GRAY);
theDesktop = new JDesktopPane();
theDesktop.setBackground(Color.GRAY);
container.add(theDesktop);
// 建立文件菜单项及其事件监听
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
fileMenu = new JMenu(" 文件(F) ");
fileMenu.setMnemonic('F');
newItem = new JMenuItem("新建(N)", 'N');
newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,
InputEvent.CTRL_MASK));// 设置快捷键
newItem.addActionListener(this);
openItem = new JMenuItem("打开(O)", 'O');
openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,
InputEvent.CTRL_MASK));
openItem.addActionListener(this);
saveItem = new JMenuItem("保存(S)", 'S');
saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
saveItem.addActionListener(this);
exitItem = new JMenuItem("退出(X)", 'X');
exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
InputEvent.CTRL_MASK));
exitItem.addActionListener(this);
// add fileMenu and its Item to the border
fileMenu.add(newItem);
bar.add(fileMenu);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
// 建立编辑菜单项及其事件监听
editMenu = new JMenu(" 编辑(E) ");
editMenu.setMnemonic('E');
undoItem = new JMenuItem("撤销(U)", 'U');
undoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U,
InputEvent.CTRL_MASK));
undoItem.addActionListener(this);
undoItem.setEnabled(false);
redoItem = new JMenuItem("重做(R)", 'R');
redoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_R,
InputEvent.CTRL_MASK));
redoItem.addActionListener(this);
redoItem.setEnabled(false);
addItem = new JMenuItem(" 添加子窗口(A) ", 'A');
addItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
InputEvent.CTRL_MASK));
addItem.addActionListener(this);
// add editMenu and its Item to the border
bar.add(editMenu);
editMenu.add(undoItem);
editMenu.add(redoItem);
editMenu.addSeparator();
editMenu.add(addItem);
// 建立颜色菜单项及其事件监听
colorMenu = new JMenu(" 颜色(C) ");
colorMenu.setMnemonic('C');
editcolorItem = new JMenuItem("编辑颜色(E)", 'E');
editcolorItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,
InputEvent.CTRL_MASK));
editcolorItem.addActionListener(this);
// add colorMenu and its Item to the border
bar.add(colorMenu);
colorMenu.add(editcolorItem);
// 建立查看菜单项及其事件监听
viewMenu = new JMenu(" 查看(V) ");
viewMenu.setMnemonic('V');
toolItem = new JMenuItem("工具箱(T)", 'T');
toolItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,
InputEvent.CTRL_MASK));
toolItem.addActionListener(this);
colorBoxItem = new JMenuItem("颜料盒(C)", 'C');
colorBoxItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
InputEvent.CTRL_MASK));
colorBoxItem.addActionListener(this);
textEditItem = new JMenuItem("文字工具栏(E)", 'E');
textEditItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,
InputEvent.CTRL_MASK));
textEditItem.addActionListener(this);
textEditItem.setEnabled(false);
stateItem = new JMenuItem("状态栏(S)", 'S');
stateItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
InputEvent.CTRL_MASK));
stateItem.addActionListener(this);
// add viewMenu and its Item to the border
bar.add(viewMenu);
viewMenu.add(toolItem);
viewMenu.add(colorBoxItem);
viewMenu.add(textEditItem);
viewMenu.addSeparator();
viewMenu.add(stateItem);
// 建立帮助菜单项及其事件监听
helpMenu = new JMenu(" 帮助(H) ");
helpMenu.setMnemonic('H');
bar.add(helpMenu);
helpItem = new JMenuItem("帮助主题(H)", 'H');
helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,
InputEvent.CTRL_MASK));
helpMenu.add(helpItem);
helpItem.addActionListener(this);
helpMenu.addSeparator();
aboutItem = new JMenuItem("关于(A)", 'A');
aboutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
InputEvent.CTRL_MASK));
helpMenu.add(aboutItem);
aboutItem.addActionListener(this);
// 添加工具箱及其事件处理
toolBar = new JToolBar("工具", SwingConstants.VERTICAL);
toolBar.setLayout(new GridLayout(15, 2));
toolBar.setSize(WIDTH / 15, HEIGHT);
toolBar.setBorder(BorderFactory.createTitledBorder("工具栏"));
penButton = new JButton(new ImageIcon(getClass().getResource("Icons/pen.gif")));
penButton.addActionListener(this);
brushButton = new JButton(new ImageIcon(getClass().getResource("Icons/brush.gif")));
brushButton.addActionListener(this);
eraserButton = new JButton(new ImageIcon(getClass().getResource("Icons/eraser.gif")));
eraserButton.addActionListener(this);
sprayButton = new JButton(new ImageIcon(getClass().getResource("Icons/spray.gif")));
sprayButton.addActionListener(this);
characterButton = new JButton(new ImageIcon(getClass().getResource("Icons/font.gif")));
characterButton.addActionListener(this);
lineButton = new JButton(new ImageIcon(getClass().getResource("Icons/line.gif")));
lineButton.addActionListener(this);
rectangleButton = new JButton(new ImageIcon(getClass().getResource("Icons/rectangle.gif")));
rectangleButton.addActionListener(this);
polygonButton = new JButton(new ImageIcon(getClass().getResource("Icons/polygon.gif")));
polygonButton.addActionListener(this);
ellipseButton = new JButton(new ImageIcon(getClass().getResource("Icons/ellipse.gif")));
ellipseButton.addActionListener(this);
roundrectangleButton = new JButton(new ImageIcon(
getClass().getResource("Icons/roundrectangle.gif")));
roundrectangleButton.addActionListener(this);
ButtonGroup drawModel = new ButtonGroup();
normalRadioButton = new JRadioButton(" 普通 ", true);
normalRadioButton.addItemListener(new ItemListener() {// 选择几何图形为普通
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
if (currentChoice == 2 || currentChoice == 3
|| currentChoice == 4) {
currentChoice = 2;
createNewItem();
repaint();
}
if (currentChoice == 9 || currentChoice == 10
|| currentChoice == 11) {
currentChoice = 9;
createNewItem();
repaint();
}
if (currentChoice == 12 || currentChoice == 13
|| currentChoice == 14) {
currentChoice = 12;
createNewItem();
repaint();
}
if (currentChoice == 15 || currentChoice == 16
|| currentChoice == 17) {
currentChoice = 15;
createNewItem();
repaint();
}
if (currentChoice == 18 || currentChoice == 19
|| currentChoice == 20) {
currentChoice = 18;
createNewItem();
repaint();
}
}
}
});
emptyRadioButton = new JRadioButton(" 虚体 ");
emptyRadioButton.addItemListener(new ItemListener() {// 选择几何图形为虚体
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
if (currentChoice == 2 || currentChoice == 3
|| currentChoice == 4) {
currentChoice = 3;
createNewItem();
repaint();
}
if (currentChoice == 9 || currentChoice == 10
|| currentChoice == 11) {
currentChoice = 10;
createNewItem();
repaint();
}
if (currentChoice == 12 || currentChoice == 13
|| currentChoice == 14) {
currentChoice = 13;
createNewItem();
repaint();
}
if (currentChoice == 15 || currentChoice == 16
|| currentChoice == 17) {
currentChoice = 16;
createNewItem();
repaint();
}
if (currentChoice == 18 || currentChoice == 19
|| currentChoice == 20) {
currentChoice = 19;
createNewItem();
repaint();
}
}
}
});
solidRadioButton = new JRadioButton(" 实体 ");
solidRadioButton.addItemListener(new ItemListener() {// 选择几何图形为实体
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
if (currentChoice == 2 || currentChoice == 3
|| currentChoice == 4) {
currentChoice = 4;
createNewItem();
repaint();
}
if (currentChoice == 9 || currentChoice == 10
|| currentChoice == 11) {
currentChoice = 11;
createNewItem();
repaint();
}
if (currentChoice == 12 || currentChoice == 13
|| currentChoice == 14) {
currentChoice = 14;
createNewItem();
repaint();
}
if (currentChoice == 15 || currentChoice == 16
|| currentChoice == 17) {
currentChoice = 17;
createNewItem();
repaint();
}
if (currentChoice == 18 || currentChoice == 19
|| currentChoice == 20) {
currentChoice = 20;
createNewItem();
repaint();
}
}
}
});
size = new JComboBox(lineSizes);
size.setMaximumRowCount(4);
size.addItemListener(new ItemListener() {// 画图的笔触宽度选择
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED)
stroke1 = Float.parseFloat(lineSizes[size
.getSelectedIndex()]);
}
});
toolBar.add(penButton);
toolBar.add(brushButton);
toolBar.add(eraserButton);
toolBar.add(sprayButton);
toolBar.add(characterButton);
toolBar.add(lineButton);
toolBar.add(rectangleButton);
toolBar.add(polygonButton);
toolBar.add(ellipseButton);
toolBar.add(roundrectangleButton);
toolBar.add(new JLabel());
toolBar.add(new JLabel());
drawModel.add(normalRadioButton);
drawModel.add(emptyRadioButton);
drawModel.add(solidRadioButton);
toolBar.add(normalRadioButton);
toolBar.add(size);
toolBar.add(emptyRadioButton);
toolBar.add(new JLabel());
toolBar.add(solidRadioButton);
// 添加颜色工具箱及其事件处理
colorBar = new JToolBar("颜色", SwingConstants.VERTICAL);
colorBar.setLayout(new GridLayout(12, 1));
ButtonGroup colorModel = new ButtonGroup();
blackButton = new JButton(new ImageIcon(getClass().getResource("Icons/black.gif")));
blackButton.addActionListener(this);
whiteButton = new JButton(new ImageIcon(getClass().getResource("Icons/white.gif")));
whiteButton.addActionListener(this);
redButton = new JButton(new ImageIcon(getClass().getResource("Icons/red.gif")));
redButton.addActionListener(this);
greenButton = new JButton(new ImageIcon(getClass().getResource("Icons/green.gif")));
greenButton.addActionListener(this);
// blueButton = new JButton(new ImageIcon("Icons/blue.gif"));
// blueButton.addActionListener(this);
otherButton = new JButton("自定义");
otherButton.addActionListener(this);
colorModel.add(blackButton);
colorModel.add(whiteButton);
colorModel.add(redButton);
colorModel.add(greenButton);
colorModel.add(otherButton);
colorBar.setBorder(BorderFactory.createTitledBorder("设置颜色"));
colorBar.add(blackButton);
colorBar.add(whiteButton);
colorBar.add(redButton);
colorBar.add(greenButton);
colorBar.addSeparator();
colorBar.add(otherButton);
// 添加字体工具箱及其事件处理
fontBar = new JToolBar("字体");
fontl = new JComboBox(fontNames);
fontl.setMaximumRowCount(5);
fontl.addItemListener(new ItemListener() {// 字体大小选择
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED)
font = fontNames[fontl.getSelectedIndex()];
}
});
font = fontNames[0];
metric = new JComboBox(fontMetrics);
metric.setMaximumRowCount(7);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -