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

📄 paintboard.java

📁 自己课程设计做的 用JAVA的画板程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		toolsGroup.add(pencilButton);
		toolsGroup.add(selectedButton);
		toolsGroup.add(unSelectedButton);
		toolsGroup.add(deletedButton);
	
		
		newButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		openButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		saveButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		exitButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		helpButton.setBorder(new BevelBorder(BevelBorder.RAISED));		
		cutButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		copyButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		pasteButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		textButton.setBorder(new BevelBorder(BevelBorder.RAISED));
	
		/*brushButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		moveButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		resizeButton.setBorder(new BevelBorder(BevelBorder.RAISED));
	
		selectAreaButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		fillButton.setBorder(new BevelBorder(BevelBorder.RAISED));*/		
		eraserButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		lineButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		circleButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		rectangleButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		pencilButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		selectedButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		unSelectedButton.setBorder(new BevelBorder(BevelBorder.RAISED));
		deletedButton.setBorder(new BevelBorder(BevelBorder.RAISED));
				
		//初始化工具栏
		setTitle("画板");
		editToolBar.add(newButton);
		editToolBar.add(openButton);
		editToolBar.add(saveButton);
		editToolBar.add(exitButton);
		editToolBar.add(helpButton);
		/*editToolBar.add(copyButton);
		editToolBar.add(cutButton);
		editToolBar.add(pasteButton);*/	
		
		
		imageToolBar.setLayout(new GridLayout(3, 3, 5, 5));
		imageToolBar.add(lineButton);
		imageToolBar.add(circleButton);	
		imageToolBar.add(rectangleButton);
		imageToolBar.add(pencilButton);
		imageToolBar.add(eraserButton);
		imageToolBar.add(selectedButton);
		imageToolBar.add(unSelectedButton);
		imageToolBar.add(deletedButton);
		imageToolBar.add(textButton);
		/*imageToolBar.add(brushButton);
		imageToolBar.add(moveButton);
		imageToolBar.add(resizeButton);
		imageToolBar.add(fillButton);
		imageToolBar.add(selectAreaButton);*/
		
		//初始化控制栏
		ctrlPanel.setLayout(new java.awt.GridBagLayout());
        ctrlPanel.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED));
        mediumPanel1.setLayout(new javax.swing.BoxLayout(mediumPanel1, javax.swing.BoxLayout.Y_AXIS));

        imageToolBar.setBorder(new javax.swing.border.TitledBorder("Drawing Tools"));
        mediumPanel1.add(imageToolBar);

        colorPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 20, 5));

        colorPanel.setBorder(new javax.swing.border.TitledBorder("Color Settings"));
        fgButton.setBackground(canvases[0].getForeground());
        fgButton.setToolTipText("Change Drawing Color");
        fgButton.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
        fgButton.setPreferredSize(new java.awt.Dimension(30, 30));
        fgButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                fgButtonActionPerformed(evt);
            }
        });

        colorPanel.add(fgButton);

        bgButton.setBackground(canvases[0].getBackground());
        bgButton.setToolTipText("Change Board Background Color");
        bgButton.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
        bgButton.setPreferredSize(new java.awt.Dimension(30, 30));
        bgButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bgButtonActionPerformed(evt);
            }
        });
        
        colorPanel.add(bgButton);
        mediumPanel1.add(colorPanel);

        brButton.setBackground(Color.BLACK);
        brButton.setText("Brush Color");
        brButton.setToolTipText("Change Brush Background Color");
        brButton.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0)));
        brButton.setPreferredSize(new java.awt.Dimension(100, 25));
        brButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                brButtonActionPerformed(evt);
            }
        });

        brColorPanel.setBorder(new javax.swing.border.TitledBorder("Brush Color Settings"));
        brColorPanel.add(brButton);
        mediumPanel1.add(brColorPanel);

        sizePanel.setLayout(new java.awt.BorderLayout(0, 3));

        weightCombo.setFont(new java.awt.Font("Dialog", 0, 10));
        weightCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Stroke Weight 1.0px", "Stroke Weight 2.0px", "Stroke Weight 5.0px", "Stroke Weight 7.5px", "Stroke Weight 10.0px" }));
        weightCombo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                weightComboActionPerformed(evt);
            }
        });

        sizePanel.setBorder(new javax.swing.border.TitledBorder("Size Setttings"));
        sizePanel.add(weightCombo, java.awt.BorderLayout.NORTH);

        eraserCombo.setFont(new java.awt.Font("Dialog", 0, 10));
        eraserCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Eraser Size 15px", "Eraser Size 20px", "Eraser Size 30px", "Eraser Size 50px", "Eraser Size 100px" }));
        eraserCombo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                eraserComboActionPerformed(evt);
            }
        });

        sizePanel.add(eraserCombo, java.awt.BorderLayout.SOUTH);
        mediumPanel1.add(sizePanel);
        
      
        fillPanel.setLayout(new java.awt.FlowLayout(BoxLayout.Y_AXIS, 4, 4));
        fillPanel.setBorder(new javax.swing.border.TitledBorder("Fill Settings"));
        //创建当选钮将其增加到按钮组
        //为每个单选按钮指定一个事件监听这者
        ButtonGroup radioGroup = new ButtonGroup();
        emptyButton.addChangeListener(new Item_FillChanged());
        filledButton.addChangeListener(new Item_FillChanged());
        radioGroup.add(emptyButton);
        radioGroup.add(filledButton);
        fillPanel.add(emptyButton);
        fillPanel.add(filledButton);
        mediumPanel1.add(fillPanel);
        
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(10, 5, 5, 5);
        ctrlPanel.add(mediumPanel1, gridBagConstraints);
        
                
        copyleft.setFont(new java.awt.Font("Verdana", 0, 10));
        copyleft.setForeground(new java.awt.Color(255, 153, 0));
        copyleft.setText("CopyLeft 2007 NJUPT");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 15, 5);
        ctrlPanel.add(copyleft, gridBagConstraints);
      		
		/********初始化tab页面板和组件间的分隔栏*********/
		canvasTabbedPane.addTab("Image1", canvasScrollPanes[0]);
		canvasTabbedPane.addChangeListener(new Act_ChangeTab());
		//文件目录树和Flash之间的分隔栏
		toolFlashSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, flashLabel, ctrlPanel);
		//文件文本域面板与指示光标所在行文本域面板之间的分隔栏
		tabbedStatusSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, canvasTabbedPane, statusScrollPane);
		//左边大面板与右边大面板之间的分隔栏
		leftCenterSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true, toolFlashSplitPane, tabbedStatusSplitPane);
		// 设置分隔栏两边面板显示的宽度,如果分割条是左右分割,则参数表示分割条的横坐标
		// 如果分割条是上下分割,则参数表示分割条的纵坐标
		leftCenterSplitPane.setDividerLocation(150);
		tabbedStatusSplitPane.setDividerLocation(460);
		toolFlashSplitPane.setDividerLocation(120);
		
		
		//初始化帮助
		initHelp();
		this.getContentPane().setLayout(new BorderLayout());
		this.getContentPane().add(editToolBar, BorderLayout.NORTH);
		this.getContentPane().add(leftCenterSplitPane);
		
	}
    
	/**
	 * 初始化帮助信息
	 */
	private void initHelp(){

		//帮助信息主要显示菜单的快捷方式
		
		// field存放JTable的表头信息,即表的标题
		String[] field = { "MenuItem", "ShortCut Key" };
		// data存放JTable的数据。
		Object[][] data = { { "     New           ", "    Ctrl+N    " },
				{ "    Open          ", "    F12       " },
				{ "    Save          ", "    Ctrl+S    " },
				{ "    Exit          ", "    Ctrl+X    " },				
				{ "    Help          ", "    Ctrl+H    " }, };
		// 用表头和数据构造一个表
		JTable help_Table = new JTable(data, field);
		help_Table.setFont(font);
		//不可编辑帮助信息表
		help_Table.setEnabled(false);
		// 为表和文本域设置背景和前景颜色
		helpTextArea.setFont(new Font("Courier", Font.TRUETYPE_FONT, 16));
		helpFrame.getContentPane().setLayout(new BorderLayout());
		help_Table.setForeground(Color.pink);
		helpTextArea.setForeground(Color.pink);
		help_Table.setBackground(new Color(70, 80, 91));
		help_Table.setSelectionBackground(new Color(70, 80, 91));
		helpTextArea.setBackground(new Color(70, 80, 91));
		helpTextArea.setText(" If you want to use this software with all functions,\n" 
						+ "     You must do the things following:\n" 
						+ "     1: install jdk_1.3 or Higher than it ;\n" 
						+ "     2: set your classpath and path correctly;\n" 
						+ "     3: if you want to use the compile and build functions,\n" 
						+ "       you should save your edited File in the save directory\n" 
						+ "       with  this software.\n ");
		// 将文本域和表加到窗体中
		helpFrame.getContentPane().add(
				new JScrollPane(help_Table,
						JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
						JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.CENTER);
		helpFrame.getContentPane().add(
				new JScrollPane(helpTextArea,
						JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
						JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED), BorderLayout.NORTH);
	
	}
	
	
	
	//退出画板
	private void exitPaintBoard(){
		if(JOptionPane.showConfirmDialog(this, "你确定退出画板?", "退出", JOptionPane.YES_NO_OPTION)== JOptionPane.YES_OPTION){
			// 如果选择YES,则退出。
			//dispose方法用于释放资源
			//释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源。
			//即这些 Component 的资源将被破坏,它们使用的所有内存都将返回到操作系统,并将它们标记为不可显示。
			//通过随后对 pack 或 show 的调用重新构造本机资源,可以再次显示 Window 及其子组件。
			//重新创建的 Window 及其子组件的状态在移除 Window 的点上与这些对象的状态将是一样的(不考虑这些操作之间的其他更改)。 
			dispose();
			System.exit(0);
		}
	}
	
	/**
	 * 键盘事件处理器
	 */
	public class MyKeyListener extends KeyAdapter{
		//覆盖父类的keyPressed方法,处理键被按下时的事件。	
		public void keyPressed(KeyEvent e){
			//按F12打开文件
			if(e.getKeyCode() == KeyEvent.VK_F12){
				(new Act_OpenFile()).actionPerformed(null);
			}
			// 按Ctrl加S键保存文件
			else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_S){
				(new Act_SaveFile()).actionPerformed(null);
			}
			// 按Ctrl加N新建文件
			else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_N){
				(new Act_NewFile()).actionPerformed(null);
			}
			// 按Ctrl加E退出编辑器
			else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_E){
				(new Act_ExitEditor()).actionPerformed(null);
			}			
			// 按Ctrl加H显示帮助
			else if (e.isControlDown() && e.getKeyCode() == KeyEvent.VK_H){
				(new Act_Help()).actionPerformed(null);
			}
		}
	}
	
	/**
	 * 窗口事件侦听器
	 */
	public class WindowListener extends WindowAdapter{
		//处理关闭窗口事件
		public void windowClosing(WindowEvent e){
			dispose();
			System.exit(0);
		}
	}
	
	/**
	 * 切换tab页事件
	 */
	class Act_ChangeTab implements ChangeListener{
		public void stateChanged(ChangeEvent e){
			//切换tab页时,更新canvas_control的值。
			canvas_control = canvasTabbedPane.getSelectedIndex();	
		}
	}
	
	/**
	 * 打开文件事件
	 */
	class Act_OpenFile implements ActionListener{
		public void actionPerformed(ActionEvent e_ji1){
			//打开已有文件
			 if (filechooser1 == null) {
	                filechooser1 = new JFileChooser();
	                filechooser1.setFileFilter(fileFilter);
	                filechooser1.setMultiSelectionEnabled(false);
	                filechooser1.setAcceptAllFileFilterUsed(false);
	                filechooser1.setCurrentDirectory(new File("./"));
	            }
	            int retVal = filechooser1.showOpenDialog(canvases[canvas_control]);
	            if (retVal != JFileChooser.APPROVE_OPTION)
	                return;
	            //获取待打开的文件名
				String filename = filechooser1.getSelectedFile().getName();
				//新建一个tab页,用于装新打开的文件
				canvasTabbedPane.addTab(filename, canvasScrollPanes[tb]);
				canvasTabbedPane.setSelectedIndex(tb);
				//将当前文本域设置到新打开的文件上
				canvas_control = tb;
				tb++;				
				//获取待打开的文件所在的目录,将目录保存至数组,这样在保存文件的时候,能够将文件名保存到目录中
				directory[canvas_control] = filechooser1.getCurrentDirectory().toString();
				try {
					//将文件内容显示到画板中					
					canvases[canvas_control].OpenFile(directory[canvas_control] + "/" + filename);	
				} catch (Exception e_open) {
					JOptionPane.showMessageDialog(dialogFrame.getContentPane(), "读取发生错误");
				}
		}
	}
	
	/**
	 * 新建文件事件
	 */
	class Act_NewFile implements ActionListener{
		public void actionPerformed(ActionEvent e_ji10){
			// 切换tab页时,更新canvas_control的值。
			canvasTabbedPane.addTab("Image" + (tb + 1), canvasScrollPanes[tb]);
			canvasTabbedPane.setSelectedIndex(tb);
			canvas_control = tb;
			tb++;
		}
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -