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

📄 paintboard.java

📁 自己课程设计做的 用JAVA的画板程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
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 + -