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

📄 paintbrush.java

📁 一个简单的画图板JAVA程序
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/**
 * @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 + -