JAVA画板
- 格式:docx
- 大小:488.02 KB
- 文档页数:33
安徽师范大学
JAVA高级程序设计实验报告
[键入作者姓名]
2013/11/19
学院名称 计算机科学学院
专业名称 软件工程
课程名称 JAVA高级程序设计
实验名称 综合练习1
选 题 2、JAVA画板
姓 名
学 号
完成日期 2013年11月19日
1
一、实验目的
1、熟练掌握Java工程的文件组织方法
2、熟悉Java用户界面程序开发
3、熟练掌握类和接口的继承
4、熟练掌握多类之间的分工组织
二、实验内容
结构设计
程序以Frame为主窗口,主要分为两个区,工具栏区和画板区。工具栏区为选择各种图形,及橡皮擦,调节画笔粗细等。画板区主要是监听鼠标在其上产生的消息,以及当前选择的图形来实现图形的绘制,在每次捕获到鼠标消息时,便重新绘制界面。
功能概要
主要功能实现菜单,各种图形的选择,画笔的调节,以及保存打开图片等。
具体的实现过程如下:
在程序中设置图形标志,建立图形超类Shape类,各种特殊图形均继承自Shape类,在实例化图形时,便使用超类作为返回类型,并定义一个超类的变量来接受每次实例化的对象。超类中用抽象关键词建立一个绘画函数,各种图形在继承后都需要针对各种图形的特点实现绘画函数,以便画出特殊图形。在绘画前会设置颜色及画笔的粗细等参数。
结论
通过几天的思考及上机实践,很大程度上完成了预期的目标,其中不乏有各种各样的问题与难题出现,但是好在网络时代的方便以及书本内容的丰富,难题都一一迎刃而解,期间的收获不言而喻。
总体来说完成预期目标。
三、实验过程
实验截图
2
1、Java工程的结构:
2、打开后的初始界面:
3
3、各种图形及橡皮擦(可调节画笔的粗细及颜色):
4、可保存和打开图片:
4
5、撤销及重画功能:
6、保存效果及关于:
5
7、颜色选择功能:
8、全屏显示功能:
6
画板源码
me.peng.window
Whitebord
package me.peng.window;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.MenuShortcut;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowStateListener;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JColorChooser;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import me.peng.util.Config;
import me.peng.wight.BrowMenu;
import me.peng.wight.PaintPanel;
public class Whitebord extends Frame implements WindowListener{
/*
* 主程序是一个Frame窗口,主要分为两个区。
* 一区为工具条区,包含一些工具,如图形选择,橡皮擦,线条的粗细等。
* 二区为画图面板区,可以使用鼠标绘画一些图形。
*/
private static final long serialVersionUID = 1L;
private BrowMenu panel; 7
private PaintPanel paintPanel;
private MenuBar menuBar;
private final static String[] menu1 = {"新建","打开","保存"};
private final static String[] menu2 = {"撤销","重做"};
private final static String[] menu3 = {"全屏","属性","关于"};
public static void main(String[] args) {
for(String string : args){
System.out.println(string);
}
new Whitebord();
}
/*
* 实例化画板
*/
public Whitebord() {
super("画板 - 2011级 软件工程 110705xx xx 开发");
this.setBounds(100, 100, 940, 600);
this.setLayout(null);
Config.HOME_INSETS = new Insets(30, 8, 8, 8); //获取窗口的显示区域
initUi();
this.setVisible(true);
}
/*
* 初始化工具栏和画板
* 如添加图形按钮等
*/
private void initUi() {
this.setBackground(new Color(0xD6DFEF)); //设置背景色
//下面是添加一些菜单,并设置监听器
menuBar = new MenuBar();
Menu m1 = new Menu("文件(K)");
m1.setShortcut(new MenuShortcut(KeyEvent.VK_F));
for (String i : menu1) {
MenuItem menuItem = new MenuItem(i);
menuItem.addActionListener(menuListener);
m1.add(menuItem);
}
m1.addSeparator();
{
MenuItem menuItem = new MenuItem("退出");
menuItem.addActionListener(menuListener);
m1.add(menuItem); 8
}
menuBar.add(m1);
Menu m2 = new Menu("编辑(E)");
m2.setShortcut(new MenuShortcut(KeyEvent.VK_E));
for (String i : menu2) {
MenuItem menuItem = new MenuItem(i);
menuItem.addActionListener(menuListener);
m2.add(menuItem);
}
menuBar.add(m2);
Menu m3 = new Menu("查看(L)");
m3.setShortcut(new MenuShortcut(KeyEvent.VK_L));
for (String i : menu3) {
MenuItem menuItem = new MenuItem(i);
menuItem.addActionListener(menuListener);
m3.add(menuItem);
}
menuBar.add(m3);
this.setMenuBar(menuBar);
//将工具条添加到窗口中
this.add(panel = new BrowMenu());
panel.setWidth(this.getSize().width);
//颜色选择控件
JColorChooser jColorChooser = new JColorChooser(Color.red);
jColorChooser.setBounds(Config.HOME_INSETS.top
+Config.PAINTPANEL_X+Config.PAINTPANEL_WIDTH,
Config.HOME_INSETS.top+Config.PAINTPANEL_Y, 300, 400);
jColorChooser.setOpaque(true);
this.add(jColorChooser);
this.add(paintPanel = new PaintPanel(panel,jColorChooser));
System.out.println(Config.HOME_INSETS.toString());
this.addWindowStateListener(windowStateListener);
this.addWindowListener(this);
}
/*
* 菜单按下监听器
*/
private ActionListener menuListener = new ActionListener() {
@Override