📄 paintboard.java
字号:
package main;
/*
软件作者: 熊锡君,时守刚
软件版权归作者所有,其他人可以对软件进行修改,可以使用软件代码,(按类使用请保留作者信息)
*/
import Painter.Command;
import Painter.ImageToJpeg;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.Timer;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.filechooser.FileFilter;
public class PaintBoard extends JFrame{
private JFileChooser filechooser1;
private JFileChooser filechooser2;
/********菜单栏、菜单和菜单项*********/
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("文件");
JMenu editMenu = new JMenu("编辑");
JMenu imageMenu = new JMenu("图像");
JMenu viewMenu = new JMenu("查看");
JMenu filterMenu = new JMenu("滤镜");
JMenu helpMenu = new JMenu("帮助");
JMenuItem newMenuItem = new JMenuItem("新建");
JMenuItem openMenuItem = new JMenuItem("打开");
JMenuItem saveMenuItem = new JMenuItem("保存");
JMenuItem saveAsMenuItem = new JMenuItem("另存为JPG");
JMenuItem closeMenuItem = new JMenuItem("关闭");
JMenuItem exitMenuItem = new JMenuItem("退出");
JMenuItem undoMenuItem = new JMenuItem("撤销");
JMenuItem redoMenuItem = new JMenuItem("恢复");
JMenuItem cutMenuItem = new JMenuItem("剪切");
JMenuItem copyMenuItem = new JMenuItem("复制");
JMenuItem pasteMenuItem = new JMenuItem("粘贴");
JMenuItem clearMenuItem = new JMenuItem("清除");
JMenuItem selectAllMenuItem = new JMenuItem("全选");
JMenuItem lineMenuItem = new JMenuItem("直线");
JMenuItem circleMenuItem = new JMenuItem("圆");
JMenuItem ovalMenuItem = new JMenuItem("椭圆");
JMenuItem undodMenuItem = new JMenuItem("圆弧");
JMenuItem rectangleMenuItem = new JMenuItem("矩形");
JMenuItem eraserMenuItem = new JMenuItem("橡皮");
JMenuItem selectedMenuItem = new JMenuItem("选中");
JMenuItem unSelectedMenuItem = new JMenuItem("撤消选中");
JMenuItem deletedMenuItem = new JMenuItem("删除");
JMenuItem textInsertyMenuItem = new JMenuItem("文本插入");
JMenuItem viewToolBarMenuItem = new JMenuItem("工具箱");
JMenuItem viewColorPaletteMenuItem = new JMenuItem("调色板");
JMenuItem viewStatusBarMenuItem = new JMenuItem("状态栏");
JMenuItem stopFlashMenuItem = new JMenuItem("停止Flash");
JMenuItem startFlashMenuItem = new JMenuItem("开始Flash");
JMenuItem reverseColorFilterMenuItem = new JMenuItem("反色");
JMenuItem rotateFilterMenuItem = new JMenuItem("旋转");
JMenuItem blurFilterMenuItem = new JMenuItem("模糊");
JMenuItem helpMenuItem = new JMenuItem("Help");
/********画布****/
//用多个画布存放多个图形文件,放在JScrollPane里
//而JScrollPane放在JTabbedPane中,这就是一个多页面的布局
//多个画布,每个画布显示一个图形
MyCanvas[] canvases = new MyCanvas[10];
//显示鼠标位置和当前绘制图形的状态栏
JTextArea statusTextArea = new JTextArea();
JScrollPane[] canvasScrollPanes = new JScrollPane[10];
JScrollPane statusScrollPane;
//多个文本域放在不同tab里
JTabbedPane canvasTabbedPane = new JTabbedPane();
//画布属性
int x = -1, y = -1, eraser, clear;
Color pencilColor;
/**********工具栏以及工具栏上的按钮**********/
JToolBar editToolBar = new JToolBar();
GridBagConstraints gridBagConstraints = new GridBagConstraints();;
JPanel ctrlPanel = new JPanel();
JPanel imageToolBar = new JPanel();
JPanel colorPanel = new JPanel();
JPanel sizePanel = new JPanel();
JPanel savePanel = new JPanel();
JLabel copyleft = new JLabel();
JPanel mediumPanel1 = new JPanel();
JPanel brColorPanel = new JPanel();
ButtonGroup toolsGroup = new ButtonGroup();
JButton fgButton = new JButton();
JButton bgButton = new JButton();
JButton brButton = new JButton();
JComboBox weightCombo = new JComboBox();
JComboBox eraserCombo = new JComboBox();
JRadioButton filledButton = new JRadioButton("Fill",false);
JRadioButton emptyButton = new JRadioButton("Empty",true);
JPanel fillPanel = new JPanel();
boolean fill = false;
JButton openButton = new JButton(new ImageIcon(loadImage("image/open.gif")));
JButton newButton = new JButton(new ImageIcon(loadImage("image/new.gif")));
JButton saveButton = new JButton(new ImageIcon(loadImage("image/save.gif")));
JButton helpButton = new JButton(new ImageIcon(loadImage("image/help.gif")));
JButton exitButton = new JButton(new ImageIcon(loadImage("image/close.gif")));
JButton copyButton = new JButton(new ImageIcon(loadImage("image/copy.gif")));
JButton cutButton = new JButton(new ImageIcon(loadImage("image/cut.gif")));
JButton pasteButton = new JButton(new ImageIcon(loadImage("image/paste.gif")));
JToggleButton textButton = new JToggleButton(new ImageIcon(loadImage("image/TextTool.png")));
JToggleButton eraserButton = new JToggleButton(new ImageIcon(loadImage("image/EraserTool.png")));
JToggleButton lineButton = new JToggleButton(new ImageIcon(loadImage("image/LineTool.gif "))); JToggleButton circleButton = new JToggleButton(new ImageIcon(loadImage("image/CircleTool.png")));
JToggleButton rectangleButton = new JToggleButton(new ImageIcon(loadImage("image/RectangleTool.gif")));
JToggleButton pencilButton = new JToggleButton(new ImageIcon(loadImage("image/PencilTool.gif")));
JToggleButton selectedButton = new JToggleButton(new ImageIcon(loadImage("image/SelectAreaTool.png")));
JToggleButton unSelectedButton = new JToggleButton(new ImageIcon(loadImage("image/4.GIF")));
JToggleButton deletedButton = new JToggleButton(new ImageIcon(loadImage("image/3.GIF")));
//该文本域显示当前光标在当前 画板中的坐标及画图状态
JTextArea showStatus = new JTextArea();
//对话框窗体,程序中所有对话框都显示在该窗体中
JFrame dialogFrame = new JFrame();
/*******组件之间的分隔栏******/
JSplitPane leftCenterSplitPane;
JSplitPane toolFlashSplitPane;
JSplitPane tabbedStatusSplitPane;
/**********文件选择、存储相关********/
//文件过滤器
Filter fileFilter = new Filter();
//文件选择器
//FileChooser fileChooser = new FileChooser();
// 文件读写控制,0表示文件选择器读文件,1文件选择器标示写文件
int fileChooser_control = 0;
FileWriter fileWriter;
// tabbedPane中tab页的当前数量
int tb = 1;
int find_control = 0;
//画板的控制器,指向当前操作的画板
int canvas_control = 0;
//当前画板的图形
Image currentImageInCanvas;
//标志文件是否为新建的,如果是新建的文件,为true
boolean[] newFileFlags = new boolean[10];
//存放打开文件所在的目录
String[] directory = new String[10];
/********用于显示Flash的控制器****/
JLabel flashLabel = new JLabel(new ImageIcon(loadImage("image/Juggler0.gif")));
Timer timer = new Timer(100, new Act_timer());
int timerControl = 0;
/********帮助相关****/
Font font = new Font("Courier", Font.TRUETYPE_FONT, 14);
JTextArea helpTextArea = new JTextArea();
JFrame helpFrame = new JFrame("Help");
public PaintBoard(){
super("画板");
SplashWindow splash = new SplashWindow("jtable.gif", this, 1000);
//为窗体添加键盘事件处理器
//下面这一行非常重要,表示窗体能够接受焦点。
//如果没有这一句,按键盘会无效。
this.setFocusable(true);
this.addKeyListener(new MyKeyListener());
//为窗体添加窗口事件处理器
this.addWindowListener(new WindowListener());
//初始化
init();
//setLocation(200, 200);
this.setBounds(140, 140, 1000, 1200);
setVisible(true);
pack();
//初始时启动动画
timer.start();
canvases[canvas_control].setCommand(Command.LINE);
}
private void init(){
/*******初始化画板、目录*********/
for(int i=0; i<10; i++){
newFileFlags[i] = true;
//设置画板的背景和前景颜色
canvases[i] = new MyCanvas(statusTextArea, this);
canvases[i].setBackground(Color.WHITE);
canvases[i].setForeground(Color.BLACK);
// 设置初始的命令为画线,将被选中的命令按钮的前景色用红色标示
lineButton.setForeground(Color.red);
canvases[canvas_control].setCommand(Command.LINE);
// 为文本域键盘设置事件处理器
canvases[i].addKeyListener(new MyKeyListener());
canvasScrollPanes[i] = new JScrollPane(canvases[i],
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
Graphics g=getGraphics();
canvases[i].paint(g);
}
//初始化显示当前鼠标位置的文本域
statusScrollPane = new JScrollPane(statusTextArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
statusTextArea.setEnabled(false);
statusTextArea.setFont(font);
statusTextArea.setBackground(new Color(70, 80, 91));
statusTextArea.setDisabledTextColor(Color.yellow);
/**************初始化菜单*************/
//初始化菜单项
newMenuItem.addActionListener(new Act_NewFile());
openMenuItem.addActionListener(new Act_OpenFile());
saveMenuItem.addActionListener(new Act_SaveFile());
saveAsMenuItem.addActionListener(new Act_SaveAs());
exitMenuItem.addActionListener(new Act_ExitEditor());
helpMenuItem.addActionListener(new Act_Help());
stopFlashMenuItem.addActionListener(new Act_StopFlash());
startFlashMenuItem.addActionListener(new Act_StartFlash());
startFlashMenuItem.setEnabled(false);
undoMenuItem.addActionListener(new Act_UndoAs());
redoMenuItem.addActionListener(new Act_Redo());
clearMenuItem.addActionListener(new Act_Clear());
lineMenuItem.addActionListener(new Act_Line());
rectangleMenuItem.addActionListener(new Act_Rectangle());
eraserMenuItem.addActionListener(new Act_Eraser());
circleMenuItem.addActionListener(new Act_Circle());
selectedMenuItem.addActionListener(new Act_Selected());
unSelectedMenuItem.addActionListener(new Act_UnSelected());
deletedMenuItem.addActionListener(new Act_Deleted());
textInsertyMenuItem.addActionListener(new Act_TextInsert());
viewColorPaletteMenuItem.addActionListener(new Act_Palette());
stopFlashMenuItem.addActionListener(new Act_StopFlash());
startFlashMenuItem.addActionListener(new Act_StartFlash());
//初始化菜单
fileMenu.add(newMenuItem);
fileMenu.add(openMenuItem);
fileMenu.add(saveMenuItem);
fileMenu.add(saveAsMenuItem);
fileMenu.add(exitMenuItem);
fileMenu.add(exitMenuItem);
editMenu.add(undoMenuItem);
editMenu.add(redoMenuItem);
editMenu.add(clearMenuItem);
helpMenu.add(helpMenuItem);
imageMenu.add(lineMenuItem);
imageMenu.add(circleMenuItem);
imageMenu.add(rectangleMenuItem);
imageMenu.add(eraserMenuItem);
imageMenu.add(selectedMenuItem);
imageMenu.add(unSelectedMenuItem);
imageMenu.add(deletedMenuItem);
imageMenu.add(textInsertyMenuItem);
viewMenu.add(viewColorPaletteMenuItem);
viewMenu.add(stopFlashMenuItem);
viewMenu.add(startFlashMenuItem);
filterMenu.add(reverseColorFilterMenuItem );
filterMenu.add(rotateFilterMenuItem );
filterMenu.add(blurFilterMenuItem );
//初始化菜单栏
menuBar.add(fileMenu);
menuBar.add(editMenu);
menuBar.add(imageMenu);
menuBar.add(viewMenu);
menuBar.add(filterMenu);
menuBar.add(helpMenu);
//将菜单栏添加到窗体中
setJMenuBar(menuBar);
/***********初始化工具栏以及按钮**********/
//初始化按钮
newButton.addActionListener(new Act_NewFile());
openButton.addActionListener(new Act_OpenFile());
saveButton.addActionListener(new Act_SaveFile());
exitButton.addActionListener(new Act_ExitEditor());
helpButton.addActionListener(new Act_Help());
eraserButton.addActionListener(new Act_Eraser());
textButton.addActionListener(new Act_TextInsert());
lineButton.addActionListener(new Act_Line());
circleButton.addActionListener(new Act_Circle());
rectangleButton.addActionListener(new Act_Rectangle());
pencilButton.addActionListener(new Act_Pencil());
selectedButton.addActionListener(new Act_Selected());
unSelectedButton.addActionListener(new Act_UnSelected());
deletedButton.addActionListener(new Act_Deleted());
// 为工具栏设置提示信息,当鼠标在工具栏按钮上停留一段时间时,会显示提示信息
newButton.setToolTipText("New");
openButton.setToolTipText("Open");
saveButton.setToolTipText("Save");
exitButton.setToolTipText("Exit");
helpButton.setToolTipText("Help");
copyButton.setToolTipText("Copy");
cutButton.setToolTipText("Cut");
pasteButton.setToolTipText("Paste");
textButton.setToolTipText("Text");
/*brushButton.setToolTipText("Brush");
moveButton.setToolTipText("Move");
resizeButton.setToolTipText("Resize");
selectAreaButton.setToolTipText("SelectArea");
fillButton.setToolTipText("Fill"); */
eraserButton.setToolTipText("Eraser");
lineButton.setToolTipText("Line");
circleButton.setToolTipText("Circle");
rectangleButton.setToolTipText("Rectangle");
pencilButton.setToolTipText("Pencil");
selectedButton.setToolTipText("Seleted");
unSelectedButton.setToolTipText("UnSelected");
deletedButton.setToolTipText("Deleted");
toolsGroup.add(textButton);
/*toolsGroup.add(brushButton);
toolsGroup.add(moveButton);
toolsGroup.add(resizeButton);
toolsGroup.add(selectAreaButton);
toolsGroup.add(fillButton);*/
toolsGroup.add(eraserButton);
toolsGroup.add(lineButton);
toolsGroup.add(circleButton);
toolsGroup.add(rectangleButton);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -