?? 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 + -