文档库 最新最全的文档下载
当前位置:文档库 › JAVA画板

JAVA画板

JAVA画板
JAVA画板

安徽师范大学JAVA高级程序设计实验报告

[键入作者姓名]

2013/11/19

学院名称计算机科学学院专业名称软件工程

课程名称JAVA高级程序设计实验名称综合练习1

选题2、JAVA画板

姓名

学号

完成日期2013年11月19日

一、实验目的

1、熟练掌握Java工程的文件组织方法

2、熟悉Java用户界面程序开发

3、熟练掌握类和接口的继承

4、熟练掌握多类之间的分工组织

二、实验内容

结构设计

程序以Frame为主窗口,主要分为两个区,工具栏区和画板区。工具栏区为选择各种图形,及橡皮擦,调节画笔粗细等。画板区主要是监听鼠标在其上产生的消息,以及当前选择的图形来实现图形的绘制,在每次捕获到鼠标消息时,便重新绘制界面。

功能概要

主要功能实现菜单,各种图形的选择,画笔的调节,以及保存打开图片等。

具体的实现过程如下:

在程序中设置图形标志,建立图形超类Shape类,各种特殊图形均继承自Shape类,在实例化图形时,便使用超类作为返回类型,并定义一个超类的变量来接受每次实例化的对象。超类中用抽象关键词建立一个绘画函数,各种图形在继承后都需要针对各种图形的特点实现绘画函数,以便画出特殊图形。在绘画前会设置颜色及画笔的粗细等参数。

结论

通过几天的思考及上机实践,很大程度上完成了预期的目标,其中不乏有各种各样的问题与难题出现,但是好在网络时代的方便以及书本内容的丰富,难题都一一迎刃而解,期间的收获不言而喻。

总体来说完成预期目标。

三、实验过程

实验截图

1、Java工程的结构:

2、打开后的初始界面:

3、各种图形及橡皮擦(可调节画笔的粗细及颜色):

4、可保存和打开图片:

5、撤销及重画功能:

6、保存效果及关于:

7、颜色选择功能:

8、全屏显示功能:

画板源码

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;

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);

}

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

public void actionPerformed(ActionEvent e) {

System.out.println(((MenuItem)e.getSource()).getLabel());

if(((MenuItem)e.getSource()).getLabel().equals("保存")) {

paintPanel.exportImage();//调用画图面板的保存图片方法

}

else if(((MenuItem)e.getSource()).getLabel().equals("撤销")) { paintPanel.Undo();//调用画图面板的撤销

}

else if(((MenuItem)e.getSource()).getLabel().equals("重做")) { paintPanel.Redo();//调用画图面板的重做

}

else if(((MenuItem)e.getSource()).getLabel().equals("全屏")) { /*

* 将画图面板的图形全屏显示出来

*/

final JFrame fillScreen = new JFrame();

fillScreen.setBounds(0, 0, 800, 600);

fillScreen.setUndecorated(true);

fillScreen.setExtendedState(JFrame.MAXIMIZED_BOTH);

fillScreen.getContentPane().setBackground(Color.black);

BufferedImage bImage =

(BufferedImage)createImage(paintPanel.getWidth(),paintPanel.getHeight());

Graphics graphics = bImage.getGraphics();

paintPanel.paint(graphics);

JLabel imageLabel = new JLabel(new ImageIcon(bImage));

fillScreen.add(imageLabel);

fillScreen.addKeyListener(new KeyListener() {

@Override

public void keyTyped(KeyEvent e) {

}

@Override

public void keyReleased(KeyEvent e) {

}

@Override

public void keyPressed(KeyEvent e) {

fillScreen.dispose();

}

});

fillScreen.setVisible(true);

}

else if(((MenuItem)e.getSource()).getLabel().equals("属性")) { /*

* 属性对话框,显示画板的宽和高

*/

JLabel jLabel = new JLabel();

jLabel.setText("

  • 宽度:

    "+paintPanel.getWidth()+"

  • 高度:

    "+paintPanel.getHeight()+"

");

JDialog jDialog = new JDialog(Whitebord.this, "属性");

jDialog.setBounds(Whitebord.this.getLocation().x+Whitebord.this.getWidt h()/3, Whitebord.this.getLocation().y+Whitebord.this.getHeight()/3, 260, 160);

jDialog.add(jLabel);

jDialog.setModal(true);

jDialog.setVisible(true);

}

else if(((MenuItem)e.getSource()).getLabel().equals("关于")) { /*

* 关于对话框,显示作者信息

*/

JLabel jLabel = new JLabel();

jLabel.setText("

  • 安徽师范大学
  • 学号:110705100
  • 开发者:张鹏
");

JDialog jDialog = new JDialog(Whitebord.this, "属性");

jDialog.setBounds(Whitebord.this.getLocation().x+Whitebord.this.getWidt h()/3, Whitebord.this.getLocation().y+Whitebord.this.getHeight()/3, 260, 160);

jDialog.add(jLabel);

jDialog.setModal(true);

jDialog.setVisible(true);

}

else if(((MenuItem)e.getSource()).getLabel().equals("退出")) { System.exit(NORMAL); //退出程序

}

else if(((MenuItem)e.getSource()).getLabel().equals("新建")) { paintPanel.clear(); //调用画板的清空方法

}

else if(((MenuItem)e.getSource()).getLabel().equals("打开")) { paintPanel.importImage(); //调用画板的打开图片方法

}

}

};

private WindowStateListener windowStateListener= new WindowStateListener() {

@Override

public void windowStateChanged(WindowEvent e) {

switch (e.getNewState()) {

case 6:

panel.setWidth(Whitebord.this.getSize().width);

break;

default:

break;

}

}

};

@Override

public void windowOpened(WindowEvent e) {

}

@Override

public void windowClosing(WindowEvent e) {

System.exit(NORMAL);

}

@Override

public void windowClosed(WindowEvent e) {

}

@Override

public void windowIconified(WindowEvent e) {

}

@Override

public void windowDeiconified(WindowEvent e) {

// TODO Auto-generated method stub

}

@Override

public void windowActivated(WindowEvent e) {

// TODO Auto-generated method stub

}

@Override

public void windowDeactivated(WindowEvent e) {

// TODO Auto-generated method stub

}

}

me.peng.wight

Whitebord

package me.peng.wight;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Paint;

import java.awt.Rectangle;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JColorChooser;

import javax.swing.JPanel;

import javax.swing.JSlider;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;

import me.peng.shape.Shape;

import me.peng.util.Config;

public class BrowMenu extends JPanel {

private static final long serialVersionUID = 1L;

private JColorChooser jChooser;

//private String[] toolsNames = {"画笔","油漆桶","文字","橡皮擦","吸管","放大镜"};

private Color foreColor = Color.black, backColor = Color.white;

private BasicStroke stroke;

private Paint paint;

private Image image;

private int shapeID = 1;

private String[] imagePaths =

{"asset\\images\\bmp40701.png","asset\\images\\bmp40711.png","asset\\images

\\bmp40751.png",

"asset\\images\\bmp40731.png","asset\\images\\bmp40741.png","asset\\images\ \bmp40761.png",

"asset\\images\\bmp40771.png","asset\\images\\bmp40781.png","asset\\images\ \bmp40791.png",

"asset\\images\\bmp40801.png","asset\\images\\bmp407610.png","asset\\images \\bmp407410.png"};

private final int SHAPE_FREELINE = 1;

private final int SHAPE_LINE = 2;

private final int SHAPE_SQUARE = 3;

private final int SHAPE_RECTANGLE = 4;

private final int SHAPE_CIRCLE = 5;

private final int SHAPE_OVAL = 6;

private final int SHAPE_CURVE = 7;

private final int SHAPE_ORECT = 8;

private final int SHAPE_TRIANGLE = 9;

private final int SHAPE_RTRIANGLE = 10;

private final int SHAPE_RHOMBUS = 11;

private final int SHAPE_FIVE = 12;

private final int SHAPE_SIX = 13;

private final int SHAPE_ERASE = 14;

private int[] ids =

{SHAPE_LINE,SHAPE_CURVE,SHAPE_OVAL,SHAPE_ORECT,SHAPE_RECTANGLE,SHAPE_TRIANG LE,SHAPE_RTRIANGLE,SHAPE_RHOMBUS,SHAPE_FIVE,SHAPE_SIX,SHAPE_CIRCLE,SHAPE_SQ UARE};

public BrowMenu() {

super();

this.setLayout(null);

this.setBackground(new Color(0xDEEBF7));

this.setBounds(Config.PANEL_X + Config.HOME_INSETS.left,

Config.PANEL_Y + Config.HOME_INSETS.top, Config.PANEL_WIDTH,

Config.PANEL_HEIGHT);

System.out.println(this.getBounds().toString());

this.setVisible(true);

jChooser = new JColorChooser(Color.white);

jChooser.setBounds(10,10,600,400);

stroke = new BasicStroke(1);

paint = Color.green;

image = this.getToolkit().getImage("asset\\images\\brow2.png");

this.initUi();

this.updateUI();

}

private void initUi() {

this.setLayout(null);

for(int i=0; i

ShapeJButton jButton = new ShapeJButton(new

ImageIcon(imagePaths[i]),ids[i]);

jButton.setBounds(4+i*(jButton.getWidth()+5), 4,

jButton.getWidth(), jButton.getHeight());

this.add(jButton);

}

JSlider slider = new JSlider(1,30);

slider.setBounds(10, 30, 200, 16);

slider.setValue(1);

slider.addChangeListener(new ChangeListener() {

@Override

public void stateChanged(ChangeEvent e) {

stroke = new

BasicStroke(((JSlider)e.getSource()).getValue());

}

});

this.add(slider);

JButton jButton = new JButton("Erase");

jButton.setBounds(10, 60, 70, 20);

jButton.addActionListener(new ActionListener() {

@Override

public void actionPerformed(ActionEvent e) {

shapeID = SHAPE_ERASE;

}

});

this.add(jButton);

}

private class ShapeJButton extends JButton {

private static final long serialVersionUID = 1L;

private int shapeId;

public ShapeJButton(ImageIcon icon,int id) {

super(icon);

this.setSize(icon.getIconWidth(), icon.getIconHeight());

this.shapeId = id;

this.addActionListener(thisListener);

}

private ActionListener thisListener = new ActionListener() { @Override

public void actionPerformed(ActionEvent e) {

shapeID = shapeId;

}

};

}

public void setWidth(int width) {

Rectangle r = this.getBounds();

r.width = width;

this.setBounds(r);

this.updateUI();

}

public Shape getShape() {

switch (shapeID) {

case SHAPE_FREELINE:

return new me.peng.shape.FreeLine();

case SHAPE_LINE:

return new me.peng.shape.Line();

case SHAPE_RECTANGLE:

return new me.peng.shape.Rectangle();

case SHAPE_SQUARE:

return new me.peng.shape.Square();

case SHAPE_CIRCLE:

return new me.peng.shape.Circle();

case SHAPE_OVAL:

return new me.peng.shape.Oval();

case SHAPE_ORECT:

return new me.peng.shape.ORect();

case SHAPE_TRIANGLE:

return new me.peng.shape.Triangle();

case SHAPE_RTRIANGLE:

return new me.peng.shape.RTriangle();

case SHAPE_FIVE:

return new me.peng.shape.Five();

case SHAPE_SIX:

return new me.peng.shape.Six();

case SHAPE_RHOMBUS:

return new me.peng.shape.Rhombus();

case SHAPE_CURVE:

return new me.peng.shape.Curve();

case SHAPE_ERASE:

return new me.peng.shape.Erase();

}

return null;

}

public Color getForeColor() {

return this.foreColor;

}

public Color getBackColor() {

return this.backColor;

}

public Paint getPaint() {

return this.paint;

}

public BasicStroke getStroke() {

return this.stroke;

}

@Override

public void paintComponent(Graphics g) { super.paintComponent(g);

int i = 0;

while(i

{

g.drawImage(image, i, 0, this);

i+=200;

}

}

}

PaintPanel

package me.peng.wight;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.FileDialog;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.Iterator;

import javax.imageio.ImageIO;

import javax.swing.JColorChooser;

import javax.swing.JPanel;

import me.peng.shape.Image;

import me.peng.shape.Shape;

import me.peng.util.Config;

public class PaintPanel extends JPanel{

/**

*

*/

private static final long serialVersionUID = 1L;

private boolean mousePressed;

private ArrayList shapes;

private PaintMouseAdapter mouseAdapter;

private BrowMenu brow;

private JColorChooser jColor;

private Shape shape;

private int redoPos = 0;

public PaintPanel() {

super();

this.setBounds(Config.HOME_INSETS.left+Config.PAINTPANEL_X, Config.HOME_INSETS.top+Config.PAINTPANEL_Y, Config.PAINTPANEL_WIDTH, Config.PAINTPANEL_HEIGHT);

this.setBackground(Color.white);

this.setVisible(true);

this.shapes = new ArrayList();

mouseAdapter = new PaintMouseAdapter();

this.addMouseListener(mouseAdapter);

this.addMouseMotionListener(mouseAdapter);

this.addMouseWheelListener(mouseAdapter);

}

public PaintPanel(BrowMenu brow, JColorChooser jColor) { super();

this.setBounds(Config.HOME_INSETS.left+Config.PAINTPANEL_X, Config.HOME_INSETS.top+Config.PAINTPANEL_Y, Config.PAINTPANEL_WIDTH, Config.PAINTPANEL_HEIGHT);

this.setBackground(Color.white);

this.setVisible(true);

this.shapes = new ArrayList();

mouseAdapter = new PaintMouseAdapter();

this.addMouseListener(mouseAdapter);

this.addMouseMotionListener(mouseAdapter);

this.addMouseWheelListener(mouseAdapter);

this.brow = brow;

this.jColor = jColor;

}

private class PaintMouseAdapter extends MouseAdapter { @Override

public void mouseMoved(MouseEvent e) {

}

@Override

public void mouseDragged(MouseEvent e) {

if(mousePressed) {

shape.addMids(e.getPoint());

updateUI();

}

}

@Override

public void mouseReleased(MouseEvent e) {

Config.mousePressed = mousePressed = false;

shape.setEnd(e.getPoint());

shape.setFinished(true);

updateUI();

}

@Override

public void mousePressed(MouseEvent e) {

Config.mousePressed = mousePressed = true;

shape = brow.getShape();

shape.setColor(jColor.getColor());

shape.setPaint(brow.getPaint());

shape.setStroke(brow.getStroke());

shapes.add(redoPos++, shape);

shape.setBegin(e.getPoint());

Config.isSaved = false;

}

@Override

public void mouseExited(MouseEvent e) {

}

@Override

public void mouseEntered(MouseEvent e) {

}

@Override

public void mouseClicked(MouseEvent e) {

}

}

public void Undo() {

if(shapes != null && redoPos > 0) {

redoPos --;

this.updateUI();

}

}

public void Redo() {

if(shapes != null && redoPos < shapes.size()) {

redoPos ++;

this.updateUI();

}

}

public void clear() {

if(!Config.isSaved) {

this.exportImage();

}

if(Config.isSaved) {

shapes.removeAll(new ArrayList());

redoPos = 0;

this.updateUI();

}

}

public void addShape(Shape _shape) {

shapes.add(_shape);

}

public boolean importImage() {

FileDialog fd=new FileDialog(new Frame(),"打开",FileDialog.LOAD); fd.setVisible(true);

if(fd.getDirectory() != null && fd.getFile() != null) {

String path = fd.getDirectory()+fd.getFile();

File file = new File(path);

JAVA简单画板程序设计实验报告

JAVA期末画板实验报告 课程题目: 运用JAVA语言编写一个画板程序,这个画板要有画图,特殊图形绘制,颜色改变,画笔大小改变等功能。 设计思想: 1.进行界面设计 2.进行算法实现 3.运行调试 4.总结问题 设计过程: A.界面设计 新建一个Jframe容器,然后定义一个panel(Panel convas2),convas2是工具栏。用borderlayout布置容器的边框布局,将工具栏放在NORTH部分。完成界面设计。 add(canvas2,BorderLayout.NORTH); Panel canvas2 = new Panel(); 添加工具按键 Panel canvas2 = new Panel(); Button btn1 = new Button("直线"); Button btn2 = new Button("椭圆"); Button btn3 = new Button("矩形"); Button btn4 = new Button("清除"); Button btn5 = new Button("画笔"); Button btn6 = new Button("橡皮"); Choice choice = new Choice(); Choice choice1 = new Choice(); canvas2.add(choice); canvas2.add(choice1);

canvas2.add(btn1); canvas2.add(btn2); canvas2.add(btn3); canvas2.add(btn4); canvas2.add(btn5); canvas2.add(btn6); 在工具表中,有两个下拉菜单,分别收录画笔的大小和颜色。1.画笔的大小: choice1.add("1"); choice1.add("3"); choice1.add("5"); choice1.add("7"); choice1.add("9"); 2.画笔颜色 choice.add("黑色"); choice.add("蓝色"); choice.add("红色"); choice.add("黄色"); choice.add("绿色"); 3展示画板

java画板课程设计报告

画板 一、需求分析 平时生活中,我们会需要处理一些基本的图像,也有可能需要花一些简单的图像,平时所使用的图形处理工具有PhotoShop、Windows 画图工具等,其中PhotoShop 是一款非常强大的图形处理工具,Windows 画图工具则是一款较为简单的画图工具,功能较为简单,用Windows画图工具,是一种比较简单与具有代表性的画图工具,虽然功能不够强大,但具有大多图片处理程序所必需的基本功能:铅笔画图、各种数学函数图形、填色、取色、橡皮擦等等。这次试验中我做的就是一个仿照windows画板的程序。 功能:1.利用graphics 类来向界面上画上相应内容 2.能够画出直线,矩形,多边形,椭圆形,圆矩形等 3.能够实现橡皮,刷子,喷枪等工具。 4.能够实验颜色的设置 5.能够保存图片和打开图片(当保存名一致时需提示) 6.界面尽量合理,可以仿照windows画板界面。 二、概要设计

流程图 画板软件类图 1.工具接口Tool: 从图中可以看到,工具接口Tool 定义了鼠标动作的四个方法,分别是拖动mouseDrapped()、移动mouseMoved()、松开mouseReleased()、按下

mousePressed()、点击mouseClicked()五个动作,并用String 类型的常量属性来定义工具的类型。这个接口只有一个实现类AbstractTool,而每个工具类 都是去扩展AbstractTool 类,在图中表现为Tool1、Tool2…….ToolN。 2.Tool的实现类AbstractTool AbstractTool 是Tool 的实现类,也是一个抽像类,所以并不能被创建,只能被继承。此类实现Tool 中定义的所有方法,并扩展了其它方法,让其子类继承或者重写。该类中为其他的工具类提供了大部分的实现,那么它的子类就可以不必再做重复的实现,只关心与本类相关的逻辑, 3.AbstractTool的子类 AbstractTool 一共有ArrowTool(箭头)、PencilTool(铅笔)、BrushTool(刷子)、EraserTool(橡皮擦)、LineTool (直线)、RectTool (矩形)、PolygonTool (多边形)、RoundTool (椭圆形)、RoundRectTool(圆矩形)、AtomizerTool (喷墨)、ColorPickedTool(颜色选择)11 个子类, 4. 界面类ImageFrame 这个画图工具的界面的主要放在这个类中实现 5. 业务逻辑类ImageService 除鼠标的画图功能外(画图功能由Tool 的实现类完成),初始化画板、图片的新建打开与保存、各种面板的显示与隐藏、颜色的编辑、整个界面的刷新、菜单等业务逻辑都放在这个类中实现, 对象,它并没有保存一些状态属性。 6 .文件选择类ImageFileChooser ImageFileChooser 类继承了JFleChooser 类,JFleChooser 是Java 提供的一个简单的文件选择机制,我们这里扩展这个类,是为了增加我们自己的文件过滤器。 三、运行环境、开发语言 Window xp 和elipse Java语言

软件工程JAVA课程设计报告

西安科技大学 软件工程课程设计报告 题目:画图板应用程序开发 班级 学号: 姓名: 2010年12月

目录 1 绪论 (3) 2 可行性研究报告 (3) 3 需求分析报告 (4) 4 总体设计报告 (7) 5 详细设计报告 (8) 6 系统实现报告 (12) 7软件测试报告 (32) 参考文献

1、绪论 1.1 目的和意义 用过微软Windows操作系统的人一定都对Windows自带的画图板非常熟悉了。同图像处理软件界的老大Photoshop比起来,它虽然不及Photoshop的功能强大,内容丰富,但是作为Windows一直以来都内带的附件程序,它具有小巧玲珑,简单实用等其他绘图软件所不具备的优点。同时它的风格也被许多其他的绘图软件所仿效。 作为一个软件工程专业的学生自己也想亲自动手编写一个属于自己的,简单实用的绘图程序。通过本次课程设计可以增加对整个流程的熟悉以及对程序组织结构和框架的理解,对以后开发和设计更大更复杂的程序无疑有更大的帮助。 任务 书写开发文档,分析和制定整个开发过程,然后开发一个自己的画图板应用程序。 2、可行性研究报告 进行可行性研究的方法 本应用程序可行性研究是通过对比windows自带的画板程序的方式进行的,对Windows 里面的画板进行分析研究,分析得出本应用软件应该实现的基本功能,并根据自己的能力进行了功能上的增加。 评价尺度 本软件在评价时应从以下几个方面进行分析: 开发时间应尽量短; 功能实现的代码应尽量少; 代码执行效率要高; 有较强的容错能力; 技术方面的可行性 系统现阶段的发展过程中,利用现有人力和物力是完全具备的能力开发出来的,作为阶段性产品,日后的发展空间大,实现方法逐步简单容易,所以画图板应用程序在技术上是完全可行的。 a.在当前的限制条件下,该程序的功能目标能达到; b.利用现有的技术,该程序的功能可以实现; c.由于能力的不足,现阶段的功能不够完美,还可以在日后完善; d.在规定的限期内,本程序能够完成; 法律方面的可行性 本程序不会在后台扫描用户的磁盘文件; 本程序为完全免费,没有任何盈利行为,而且仅在内部流通,不予推广,所以不涉及浸犯微软版权的行为,所以本软件完全合法。 软件服务条款要与中华人民共和国的法律解释相一致,一致同意服从高等法院所有管辖。如发生软件服务条款与中华人民共和国法律相抵触时,则这些条款将完全按法律规定重新解释,而其它条款则依旧保持对用户产生法律效力和影响。 经济可行行

用c++编画板的实训报告

一实训目的 (1)培养分析问题、解决问题的能力 (2)培养考虑问题的周密性和逻辑思维能力 (3)培养实际动手能力 (4)培养C++知识的综合运用能力 二实训任务和要求 1.图形: 带颜色的图形。(增加选色功能) 线粗不同的图形。(修改线粗的功能) 块状图。(图形的填充色和边线颜色可以不同,由用户选择) 等等。。 2. 界面 工具栏,状态栏,改变鼠标,查看窗口等等 3. 编辑 在重新打开时和在正常情况下一样画图或者选中图形进行图形编辑。 4. 文件保存 EMF文件,导入位图文件成为一个(由位图填充的)矢量矩形等等。 5. 编辑 单个图像拖动,改变图形节点位置 能够进行基本的图形绘制功能:直线,圆、矩形和多边形; 数据保存功能,能够把图形数据保存到文件中; 简单的编辑功能:改变线条和填充颜色以及线宽; 三实训过程和内容 3.1需求分析 (1)认识C++编程软件 C++是一种使用非常广泛的计算机编程语言。C++是一种静态数据类型检查的,支持多重编程范式的通用程序设计语言。它支持过程化程序设计、数据抽象、面向对象程序

设计、制作图标等等泛型程序设计等多种程序设计风格。C++支持C语言的几乎全部功能,在语法上与C语言仅有极微妙的差别;C++语言原本不具备面向对象的设计功能,然而随着面向对象编程的概念的提出以及如Java等语言的发展成熟,C++语言也开发出了支持面向对象功能的版本,现在编程者常用的VC++就是一种面向对象的语言;C++强大(但容易失控的)模板功能使它能在编译期完成许多工作,从而大大提高运行期效率。STL(C++标准模板库,Standard Template Library);随着STL的不断发展,它已经逐渐成为C++程序设计中不可或缺的部分,其效率可能比一般的native代码低些,但是其安全性与规范性使它大受欢迎。 (2)计算机图形的认识 在计算机科学中,图形和图像这两个概念是有区别的:图形一般指用计算机绘制的画面,如直线、圆、圆弧、任意曲线和图表等;图像则是指由输入设备捕捉的实际场景画面或以数字化形式存储的任意画面。图像是由一些排列的像素组成的,在计算机中的存储格式有BMP、PCX、TIF、GIFD等,一般数据量比较大。它除了可以表达真实的照片外,也可以表现复杂绘画的某些细节,并具有灵活和富有创造力等特点,而与图像不同,在图形文件中只记录生成图的算法和图上的某些特点,也称矢量图。在计算机还原时,相邻的特点之间用特定的很多段小直线连接就形成曲线,若曲线是一条封闭的图形,也可靠着色算法来填充颜色。它最大的优点就是容易进行移动、压缩、旋转和扭曲等变换。 3.2 设计 (1)C++程序中的应用程序对象 (a)基于窗口的应用程序还是使用MFC比较多,所以主要介绍一下MFC。 CWnd窗口:它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。CDocument文档,负责内存数据与磁盘的交互。最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)CView视图:负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd::Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。 CDC设备文本:无论是显示器还是打印机,都是画图给用户看。这图就抽象为CDC。CDC与其他GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。CDC有个常用子类CClientDC(窗口客户区),画图通常通过CClientDC完成。 CDialog:对话框 CWinApp应用程序类:似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。 CGdiObject及子类:用于向设备文本画图。它们都需要在使用前选进DC。 CPen笔:画线 CBrush刷子:填充 CFont字体:控制文字输出的字体 CBitmap:位图

java简易画图板

华北科技学院 课程设计说明书 班级: 网络B101 设计题目: 画图板软件开发和设计 评语:_________________________________ _________________________________________ _________________________________________ _________________________________________ _________________________________________ 评阅成绩:____评阅教师:_____ 目录 1 引言 (1)

1.1课程设计选题 (1) 1.2课程设计的目的 (1) 1.3本选题的设计背景 (1) 2 需求分析 (1) 2.1 功能需求 (1) 2.2 系统的开发运行环境 (2) 3 总体设计 (2) 3.1 系统体系结构设计 (2) 3.2系统功能模块及主要类设计 (3) 4 详细设计与实现 (6) 4.1 菜单栏模块 (6) 4.2 文字字型工具栏模块 (7) 4.3 工具栏模块 (8) 4.4 颜色选择面板模块 (10) 4.5 鼠标状态栏模块 (12) 4.6 画图区域以及整体布局模块 (13) 5 小结和展望 (15) 参考文献 (17) 附录 (17) 使用说明书 (17)

1引言 1.1课程设计选题 《画图板软件开发和设计》 1.2课程设计的目的 使学生巩固和加深以Java 语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发方案,达到能独立阅读、编制和调试一定规模的Java程序的水平。 1.3本选题的设计背景 平时生活中,我们会需要处理一些基本的图像,也有可能需要花一些简单的图像,平时所使用的图形处理工具有 PhotoShop、Windows 画图工具等,其中PhotoShop 是一款非常强大的图形处理工具,Windows 画图工具则是一款较为简单的画图工具,功能较为简单,用Windows画图工具,是一种比较简单与具有代表性的画图工具,虽然功能不够强大,但具有大多图片处理程序所必需的基本功能:铅笔画图、各种数学函数图形、填色、取色、橡皮擦等等。所以这次课程设计我做的就是一个仿照Windows画板的程序。 通过画图板软件开发与设计,更深刻地体会java语言较之其他语言在图形用户界面的优势。熟悉java语言中常用的关于画图的各个类的功能和常用的方法(java图形用户界面中的众多函数与类的关系),并在实验过程中加深对java语言的理解与运用。 2需求分析 2.1 功能需求 对于绘图软件,应具备最基本的绘制直线,矩形框,圆形框,椭圆框等最基本功能,此外,要可以对绘制的图形进行修改;将绘制好的图形进行保存,打开以前保存的图形;在需要的时候,可以绘制实心矩形,实心圆形,实心椭圆等常见的几何图形。可

JAVA简单画板程序设计实验报告

J A V A简单画板程序设计 实验报告 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

JAVA期末画板实验报告 课程题目: 运用JAVA语言编写一个画板程序,这个画板要有画图,特殊图形绘制,颜色改变,画笔大小改变等功能。 设计思想: 1.进行界面设计 2.进行算法实现 3.运行调试 4.总结问题 设计过程: A.界面设计 B.新建一个Jframe容器,然后定义一个panel( Panel convas2), convas2是工具栏。用borderlayout布置容器的边框布局,将工具栏放在NORTH部分。完成界面设计。 add(canvas2,; Panel canvas2 = new Panel(); 添加工具按键 Panel canvas2 = new Panel(); Button btn1 = new Button("直线"); Button btn2 = new Button("椭圆"); Button btn3 = new Button("矩形"); Button btn4 = new Button("清除");

Button btn5 = new Button("画笔"); Button btn6 = new Button("橡皮"); Choice choice = new Choice(); Choice choice1 = new Choice(); (choice); (choice1); (btn1); (btn2); (btn3); (btn4); (btn5); (btn6); 在工具表中,有两个下拉菜单,分别收录画笔的大小和颜色。 1.画笔的大小: ("1"); ("3"); ("5"); ("7"); ("9"); 2.画笔颜色

Java画板实验报告

二、Java画板的设计 一、实验名称及其要求 A、实验名称:Java画板的设计 B、实验要求: 1.实验目的:图形界面设计。 熟悉java.awt包中的组件,掌握图形界面设计方法,理解委托事件处理模型。 2.实验要求: (1)设计图形界面添加菜单:窗口上添加各种组件及菜单,并处理组件及菜单的事件监听程序。 (2)实现画板的基本功能。 二、程序设计 本程序完成的是一个类似于Windows画图板的绘图程序。由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项: 1.新建一个空白图形文件:用于绘制新的图形。 2.打开或保存一个图形文件,便于对图形文件的管理。 3.绘制一些基本的画图组件:直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等。 4.可以用鼠标在绘图面板上单击拖动进行随笔画。 5.橡皮擦:可以将已绘制好的图形擦掉。 6.添加文字:可以在绘图区域内添加文字。 7.选择文字的字体:通过一个下拉式的选择条,可以选中所需要的字体。本程序中包括:宋体、隶书、华文彩云、仿宋_GB2312、华文行楷、方正舒体、Times New Roman、Serif、Monospaced、SonsSerif、Garamond。当然,在下面的的程序分析中可以看到,由于我们灵活设置了字体数组,是的可以随意添加系统支持的任何字体。大大方便和简化了程序设计。 8.选择文字的字体风格:通过两个复选框按钮,可以选择需要的字体风格,包括:粗体、斜体,使用者有三种选择方式,包括:①同时选中两者、②只选择其中一种、③两者都不选中。 9.设置画笔的颜色:可以选择当前绘制图形的画笔颜色,让图形更加丰富多彩、生动活泼。 10.设置画笔的粗细:该选项在作用于基本图形组件和文字时,它的效果是不一样的。①当作用于绘制图形组件时,它的作用是改变画笔绘制线条的粗细;②当作用于文

Java画图板程序设计报告

西安科技大学Java语言课程设计报告 ¥

题目:画图板应用程序开发 & 班级: 学号: 姓名: 2010年 12 月 目录 1 设计题目及具体要求 (3) · 2 总体设计 (6) 3 详细设计与实现 (4) 4 系统测试 (11) 5 设计小结 (31) 参考文献 $

: 1、设计题目及具体要求 题目需求 ? 1. 设计题目:小画图板的开发。 2. 重点分析 本软件的重难点为主窗体的设计、菜单栏和工具栏的设计、事件响应的处理、画图的基本功能的实现。 3. 实现功能

1.新建一个空白图形文件:用于绘制新的图形。 2.打开或保存一个图形文件,便于对图形文件的管理。 3.绘制一些基本的图形组件:直线,矩形,实心矩形,椭圆,实心椭圆,圆,实心圆,圆角矩形,实心圆角矩形等。 4.用鼠标在绘图板上单击拖动进行随笔花。 5.` 6.橡皮擦:可以将已绘制的图形擦掉。 7.添加文字:可以在绘图区域内添加文字。 8.选择文字的字体:通过一个下拉式的选择条,可以选中所需要的字体。本程序中包括:宋体,隶书,华文彩云,仿宋-GB2312,华文行楷,Times New Roman,Serif,Monospaced,SonsSerif,Garamond。当然,在下面的程序分析中可以看到,由于设置了字体选择数组,使得可以随意添加系统支持的任何字体。大大方便和简化了程序设计。 9.选择文字的字体风格:通过两个复选框按钮,可以选择需要的字体风格,包括:粗体,斜体,用同时选中两者,只选择其中一种或两者都不选中3种选择方式。10.设置画笔的颜色:可以选择当前绘制图形的画笔颜色,让图形更加丰富多彩,生动活泼。 10. 设置画笔的粗细:该选项在作用于基本图形组件和文字时,它的效果是不同的。 当作用于绘制图形组建时,它的作用是改变画笔绘制线条的粗细;当作用于文字时,它的作用是改变文字的大小。 ;

画图画板设计模式课程设计任务书

长沙学院课程设计说明书 题目设计模式课程设计 系(部) 数学与计算机科学系 专业(班级) 数媒2班 姓名胡辉衡 学号B20140304401 指导教师朱建凯 起止日期2016年12月19日

课程设计任务书 课程名称:设计模式课程设计 设计题目:基于设计模式的绘图程序 已知技术参数和设计要求: 1.问题描述(功能要求): 1.需求分析 该系统是一个画图程序,我们要用设计模式的思想来设计系统结构,然后实现基本图形的绘制功能。 1.1 设计模式要求 至少在其中运用 3 种模式,其中涉及到的模式有装饰模式、策略模式、桥梁模式三种。 1.2 画图基本要求 能实现基本图形的绘制功能 1.3 画图高级要求 实现图形的操作(如选取、移动、放大、缩小、改变颜色、改变线形等)和持久化(利用文件或利用数据库)。 1.4 参考界面

图1 参考效果图1 图2 参考效果图2 2. 运行环境要求: Windows操作系统;

Eclipse 3. 技术要求: 给出至少3种设计模式,要求具体说明使用每种设计模式的动机,画出类图,并代码实现,然后评价该设计模式的优缺点。 设计工作量: 2周 工作计划: (1) 2014级软件工程 4课时:讲授 32课时:上机、调试。计算机系机房 4课时:答辩。计算机系机房。 指导教师签名:日期: 教研室主任签名:日期: 系主任签名:日期:

长沙学院课程设计鉴定表

目录 第1章系统需求 (8) 1.1系统总需求 (8) 1.2功能需求 (8) 第3章系统设计 (9) 3.1系统总功能模块设计 (9) 3.2子功能模块设计 (9) 3.2.1构建基本图形 (9) 3.2.2装饰模式组合图形 (10) 3.2.3桥接模式修饰图形颜色线条粗细 (10) 第4章系统实现 (11) 4.1简单工厂模式绘制基本图形 (11) 4.1.1装饰模式图形组合 (13) 4.1.2桥接模式改变粗细绘制图形 (14) 第5章系统测试 (15) 5.1测试目的 (15) 5.2测试手段 (15) 5.3测试用例 (15) 5.3.1登陆界面测试 (15) 结论 (16) 参考文献 (17) 结束语 (18) 附录 (19)

javaEE课程设计报告

课程设计 课程名称: JAVAEE/.NET课程设计 设计题目:校园超市商品信息管理系统 学院:信息工程与自动化学院 专业:计算机科学与技术 年级: 2011年级 学生姓名: 指导教师: 日期: 2014-6-30——2014-7-11 教务处制

课程设计任务书 信息工程与自动化学院计算机科学与技术专业 2011 年级学生姓名:张建兴 课程设计题目:校园超市商品信息管理系统 课程设计主要内容: 本次课程设计自主完成一个系统,题目学生自定。我设计的是一个校园超市商品信息管理系统,是一个小型系统,适用于一些小型超市,对库存商品,售出商品,日常业务进行管理。主要采用jsp+servlet+数据库配合的方式工作。Jsp 负责页面显示,servlet处理逻辑业务,后台数据库采用mysql数据库。用到连接数据库,对数据库的操作,servlet跳转,实现部件之间的合作,前台(jsp)获取并显示后台(数据库)数据,或者后台(数据库)获取并存储前台数据。 设计指导教师(签字): 教学基层组织负责人(签字): 年月日

摘要 本次课程设计题目有学生自定,学生可以受日常学习生活启发来设计一个系统。这次课程设计主要要求学生掌握javaEE网络编程,老师要求学生自主完成规模不限的系统,自定题目,自主设计。对于这次课程设计,我把它当做一次实践的机会,设计过程中希望通过跟同学讨论,提问老师等方式使自己得到提升,毕竟平时自己一个人琢磨很难解决一些问题,也很难提高技巧。之前对于MVC 编程方法的逻辑不是那么清晰,很难衔接好各个层之间的接口。如果时间足够,希望这一次通过各种方法,在采用MVC的编程思想的前提下,自己完成一个完整的系统。这一次我自主设计并完成了校园超市商品信息管理系统,旨在复习javaEE/.net的知识,并从这一次实践中获得技术的提升。熟练编程中的一些技巧和编程中常见的错误 每个校园内都会有好几个小型的超市,虽然说是小型,但也提供了上万学生日常所需的任何商品,在我印象中在校园里的超市能找到你所需要的一切。超市的商品肯定很多,零零碎碎很繁杂,难管理,所以一个管理超市商品信息和业务的系统根由必要。可以减轻店员的工作量,提高效率。 超市商品信息管理系统是一个规划管理超市商品的价格,库存,利润和日常的一些业务的一个小型系统,适用于一些小型超市。它包括三个主要功能:库存商品管理,售出商品管理和日常业务管理。在这三大功能下又各自包括对商品的添加,查询和删除等功能。是一个小型,便捷地系统。 关键字:超市,管理商品,业务,功能

java课程设计--迷你画板

天津商业大学宝德学院 Java程序设计课程报告 2013—2014学年第二学期 题目迷你画板的开发与研究学号12501116 12501114 学生姓名吴承祖陈磊 所在专业电子商务 所在班级1201

目录 1 1 引言................................................................. 1.1 设计目的............................................................. 1 1.2 设计说明............................................................. 2 2 总体设计............................................................. 2 2.1 功能模块设计......................................................... 3 2.2 流程图设计........................................................... 4 3 详细设计............................................................. 5 3.1 迷你画板的布局设计................................................... 5 3.2 工具栏的设计........................................................ 5 3.3 状态栏的的设计...................................................... 5 3.4 绘图区域的设计...................................................... 6 4 测试与运行...........................................................7 4.1 程序测试.............................................................7 4.2 程序运行.............................................................7 5 总结.................................................................10 参考文献................................................................11

画图板课程设计

《Java程序设计》课程设计报告 题目:小小画图板开发 信电学院计算机(3)班 报告人姓名:王振庭 完成起止日期:2012.6.25——2012.7.6

目录 一:程序设计的目的和意义 二:程序设计: (一):程序基本组成框架和结构 (二):画图板相关操作 三:系统功能设计分析 四:程序结构说明 五:程序绘图效果示意图 六:程序源代码及其分析说明 七:参考文献

小小画图板开发 一:程序设计的目的和意义 用过微软Windows操作系统的人一定都对Windows自带的画图板非常的熟悉。同图像处理软件界的“大哥大”Photoshop比起来,它虽然不及Photoshop的功能强大、内容丰富,但是作为Windows一直以来都内带的附件程序,它具有小巧玲珑、简单实用等其它绘图软件所不具备的优点。同时它的风格也被许多其它绘图软件所效仿。 通过本绘图程序的编写,我们可以看到如何运用自己已经掌握的知识,自己动手来完成一个Java绘图程序,通过整个流程的熟悉以及对程序组织结构和框架的理解,也可以极大的促进我们对Java程序和面向对象程序设计的认识和掌握。 通过本次课程的学习,我们可以更加系统地学习和了解如何从整体上设计和实现一个程序,这对我们今后学习、开发和设计更大更复杂的程序有着很大的帮助。 二:程序设计 本程序完成的是一个类似于Windows画图板的绘图程序。由于不是开发和设计专业的绘图和图像制作软件,所以,完成的程序的简单功能包括以下几项: 1.新建一个空白图形文件:用于绘制新的图形。 2.打开或保存一个图形文件,便于对图形文件的管理。 3.绘制一些基本的画图组件:直线、矩形、实心矩形、椭圆、实心椭圆、圆、实心圆、圆角矩形、实心圆角矩形等。 4.可以用鼠标在绘图面板上单击拖动进行随笔画。

我的java课程设计报告之画图板

我的java课程设计报告 画图板 目录 1.项目背景/1 2.功能图/1 3.类图/1 4.源代码/1 5.运行结果/12

1.项目背景 本设计的目的是综合面向对象程序设计课程中所学到的知识来开发一个小型的Java应用程序—画图板。本项目的开发工具是Eclipse 4.5。 2.功能图 3.类图 4.源代码 import java.applet.Applet; import java.awt.*; import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import java.awt.event.WindowAdapter; 2

import java.awt.event.WindowEvent; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.Properties; import java.util.Vector; import javax.imageio.ImageIO; import javax.swing.JColorChooser; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; public class DrawPencil extends Applet { private static final long serialVersionUID = 1L; Vector paintInfo = null;// 点信息向量组 int n = 1; MediaTracker mt; int x = -1, y = -1; int con = 1; int Econ = 5; int toolFlag = 0; Color c = new Color(0, 0, 0); BasicStroke size = new BasicStroke(con, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); EveryPoint cutflag = new EveryPoint(-1, -1, c, 6, con); Panel toolPanel; Button eraser, drLine, drCircle, drRect; Button clear, pen; Choice ColChoice, SizeChoice, EraserChoice; Button colchooser; 3

JAVA计算器实验报告

实验四实验报告 实验名称 计算器实现 实验目的 通过本次实验使学生掌握java语言图形用户界面开发的相关技术。 实验内容 代码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; /** * 一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。但还不支持键盘操作。 */ publicclass Calculator extends JFrame implements ActionListener { /** 计算器上的键的显示名字 */ privatefinal String[] KEYS= { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" }; /** 计算器上的功能键的显示名字 */ privatefinal String[] COMMAND = { "Backspace", "CE", "C" }; /** 计算器左边的M的显示名字 */ privatefinal String[] M = { "", "MC", "MR", "MS", "M+" }; /** 计算器上键的按钮 */ private JButton keys[] = new JButton[KEYS.length]; /** 计算器上的功能键的按钮 */ private JButton commands[] = new JButton[COMMAND.length]; /** 计算器左边的M的按钮 */ private JButton m[] = new JButton[M.length];

JAVA画图板程序实验报告(附完整代码)分析

画板程序 一、软件系统分析和设计方案 1、功能需求分析 设计类似于Windows画板的程序,程序可以通过功能菜单(或工具条)进行功能选择操作,在画板中可以用鼠标操作绘制不同颜色的点,直线,多边形和椭圆,可以保存和打开自定义的图形文件。 2、结构设计过程 经过对需求的分析,我们设计的画图板界面主要包括菜单栏、工具栏、画板三个部分。菜单栏包含文件、编辑、帮助等常见功能菜单,实现打开保存文件等功能;工具栏主要包括画笔、矩形、椭圆、直线、刷子、橡皮、文字、颜色等工具,可完成一些基本操作;画板能够编辑处理图片及文字。而代码实现上采用面向对象的思想,将上述组件封装与一个画板类中布局并实现功能;通过一个窗框类实现画板对象;最后在主类中建立窗框对象。思路如下图: 二、软件实现和代码编写 具体代码及详细注释如下: import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import javax.swing.UIManager.*; import java.io.*; import java.util.Vector;

//主类建立窗框 public class DrawPad { public static void main(String[] args) { try {// 优化UI效果 for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } } } catch (Exception e) { System.out.println(e); } new DrawFrame(); } } // 添加窗口和画板组件 class DrawFrame extends JFrame { public DrawFrame() { DrawPanel panel = new DrawPanel(); add(panel); setTitle("简单JAVA画板"); setBounds(100, 100, 800, 600); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } // 定义绘画点的基本属性 class position implements Serializable { int x; int y; int type; String s; Color color; } // 定义画板组件 class DrawPanel extends JPanel implements ActionListener, MouseListener, MouseMotionListener { JMenuBar mb;// 菜单栏 JMenu menu1, menu2, menu3; JMenuItem i1, i2, i3, i4; JPanel jp1; // 工具栏 public JButton anj0, anj1, anj2, anj3, anj4, anj5, anj6, anj7, anj8, anj9, anj10; JLabel l1, lcolor; Vector thedraw = new Vector(); // 保存画图轨迹的数组int style = 0; // 保存画图类型,默认为画笔 int x1 = 0;// 保存点的坐标 int x2 = 0; int y1 = 0; int y2 = 0; String input = "";// 默认输入文字内容 Color linecolor = Color.BLACK; // 默认线的颜色

课程设计报告JAVA画板模拟画图工具

目录 1 课题介绍 (1) 1.1 课程设计目的 (1) 1.2 课程设计要求 (1) 1.3 课程设计主要知识点 (1) 2 总体设计 (1) 2.1 画板界面设计图 (1) 2.2 模块概述 (1) 2.2.1 文件操作 (1) 2.2.2 图形绘制 (1) 3 详细设计与实现 (1) 3.1 框架类DrawGraphic (1) 3.1.1菜单 (1) 3.1.2工具栏 (1) 3.1.3画图区域 (1) 3.2 基本图形类 (1) 3.2.1 父类Drawings (1) 3.2.2 子类(只列出部分) (1) 4 设计中的难点 (1) 4.1多态与动态绑定 (1) 4.2重绘的理解 (1) 4.3文件的新建、打开和保存 (1)

5 运行测试 (1) 6 总结 (1) 参考文献 (1)

1 课题介绍 1.1 课程设计目的 课程设计题目:模拟画图 要求设计一个程序,模拟Windows中的画图程序,实现图形图像的编辑,修改,保存等功能。 1.2 课程设计要求 (1)程序中必须包括“新建”、“打开”、“保存”,用户可以选择,实现对文件的操作; (2)画图板的绘图按钮用来画出不同的图形,包括实心图形和空心的图形; (3)可以对线条的颜色和粗细进行设置,也可以对填充图形的颜色进行设置和更改。 1.3 课程设计主要知识点 (1)框架类DrawGraphic继承了Swing类库中JFrame,并且用到JButton,JLabel,JPanel,等Swing类库中的组件进行窗体设计; (2)选择一个文件,用到组件JFileChooser; (3)选择颜色,用到组件JColorChooser; (4)弹出标准对话框,用到组件JOptionPane; (5)在单击绘图按钮时,所触发的动作通过方法addActionListener和ActionListener接口的actionPerformed方法共同实现; (6)MouseAdapter和MouseMotionAdapter用来完成鼠标各种事件的相应操作,包括单击、移动、拖拽等;

相关文档