Java画板实验报告

Java画板实验报告
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.设置画笔的粗细:该选项在作用于基本图形组件和文字时,它的效果是不一样的。①当作用于绘制图形组件时,它的作用是改变画笔绘制线条的粗细;②当作用于文

字时,它的作用是改变文字的大小。

由此可以看到,虽然我们的画图板程序不及那些专业的绘图程序,但是,“麻雀虽小,五脏俱全”,它已经具备了一个绘图软件所应该有的基本功能和操作。通过对本程序的分析,我们可以更加系统地学习和了解如何从整体上设计和实现一个程序。

(一):程序基本组成框架和结构

1.一组基本图形按钮,包括:pencil(随笔画)、line(直线)、rect(矩形)、frect (实心矩形)、oval(椭圆)、foval(实心椭圆)、circle(圆)、fcircle(实心圆)、roundrect (圆角矩形)、frrect(实心圆角矩形)、rubber(橡皮擦)、word(文字)。

这些基本图形都继承于同一个父类:drawings。drawings 具有变量(属性):

int x1,x2,y1,y2; //用来存放相应图形元素的坐标

int R,G,B; //用来存放图形色彩颜色信息

float stroke; //用来存放画笔粗细

int type; //用来保存图形类型

String s1; //用来保存输入文字字符串

String s2; //用来保存字体类型字符串

同时,drawing还具有方法:

void draw ( Graphics2D g2d ) {} ;

draw()方法中用到了Java绘图里面的Graphics2D类,所有继承drawings类的图形子类都重写了此方法。这就是Java程序中类的继承的概念。它对于程序代码的重用是很重要的,将极大的方便和简略程序代码。

2.此外,程序中还包括一下三个基本操作按钮:

①新建(New):新建一个图形文件。

②打开(Open):打开一个图形文件。

③保存(Save):保存当前图形文件。

3.选择颜色和设置当前画笔粗细的按钮分别为:颜色(Color)、线条粗细(Stroke)。

4.选择当前字体风格的选择框为:粗体(BOLD)、斜体(ITALIC),用以设置当前字体的风格。

5.选择当前字体的下拉式复选框为:Styles。

6.菜单条及其组成:

①文件(File)菜单项,包括:New(新建一个图形文件)、Load(打开一个图形文件)、Save(保存当前图形文件)、Exit(退出程序)。

②颜色(Color)菜单项:用来设置当前颜色。

③线条粗细(Stroke)菜单项:用来设置当前画笔粗细。

④帮助(Help)菜单项:有关的程序帮助提示。

完成的程序界面效果如下图:

二):画图板相关操作

1.新建一个图形文件

选择File→New菜单,则清除当前所绘制的图像,回到初始画面。

2.打开已有的文件

选择File→Load菜单,则清除当前所绘制的图像,并弹出打开文件对话框要求选择要打开的文件。如下图:

3.保存

选择File→Save菜单,则弹出要求保存文件对话框。

4.绘制基本图形

基本图形包括以下几种:

pencil:随笔画,图标为:。

line:直线,图标为:。

rect:矩形,图标为:。

frect:实心矩形,图标为:。

oval:椭圆,图标为:。

foval:实心椭圆,图标为:。

circle:圆,图标为:。

fcircle:实心圆,图标为:。

roundrect:圆角矩形,图标为:。

frrect:实心圆角矩形,图标为:。

Rrubber:橡皮擦,图标为:。

绘图时,单击工具栏上相应图形的图标,然后用鼠标拖动,在绘图区域内进行绘图即可。

5.设置画笔大小

单击工具栏上的图标,或单击Stroke→Set Stroke菜单,则弹出相应的设置当前画笔粗细对话框。如下图:

6.选择颜色

单击工具栏区域,或单击Color→Choose Color菜单,则弹出相应的选择当前画图颜色对话框。如下图:

1.选择字体风格

在工具栏区域,可以选择相应的字体风格,有粗体、斜体和粗斜体三种可供选择。

2.选择字体

在工具栏区域,可以选择字体,本程序中有如下几种字体可供选择:宋体、隶书、华文彩云、仿宋_GB2312、华文行楷、方正舒体、Time New Roman、Serif、Monospaced、SonsSerif、Garamond。

三:系统功能设计分析

画板主要由以下几个部分组成:

1.主窗体的设计。主类(DrawPad)用来生成主界面,完成画图板的主要框架。主类由JFrame派生出来。主界面由菜单栏、工具栏和画图区域三部分组成,布局格式采用BorderLayout布局形式。

2.菜单栏和工具栏的设计。菜单栏包括文件菜单栏、颜色菜单栏、线条粗细菜单栏和提示菜单栏。其中①文件菜单栏包括文件的新建、打开、保存等选项;②颜色菜单栏可以进行颜色选择;③线条粗细菜单栏设置线条的粗细;④提示菜单栏给出提示信息。

工具栏由新建、打开和保存文件按钮、基本图形的按钮、选择字体风格复选框和字体下拉列表框组成。在主类中添加并对菜单栏和工具栏添加事件监听。

3.事件响应的处理。对菜单栏、工具栏和用鼠标画图的事件响应进行处理。

①菜单栏中文件的新建、打开和保存菜单事件的处理:Java把每个文件都视作顺序字节流。如果要在Java中进行文件处理,则必须用到Java.io包。这个包定义了一些流类,选用FileInputStream(从文件中读入数据)和FIleOutputStream(向文件输出数据),通过建立这些文件的对象便可以打开文件。这些流相应地从InputStream 和OutputStream派生,这些文件均使用文件流,所以必须将文件结构化以适应程序的要求。我们需要对保存的对象序列化,然后以输出流的方式保存。在程序中用newFile()、loadFile()和saveFile()三个函数分别实现文件的新建、打开和保存。

②工具栏事件的处理:主要有一些Button组成。我们用ButtonHandler

内部类处理基本单元事件,ButtonHandler1内部类处理新建、打开和保存文件按钮,在画图类DrawPanel中定义CreateNewItem()函数处理工具栏中的画图事件。

③鼠标画图:由于画图板主要是用来画图,所以需要在程序中添加对鼠标按下、拖动、进入、退出、移动和单机事件进行监听并进行处理。内部类mouseA定义了完成鼠标按下、松开、进入、退出事件响应。内部类mouseB完成鼠标拖动和移动事件响应。

4.画图的基本功能。在程序设计中用到了动态绑定,我们可以提取他们的公共属性,先建立一个父类,然后建立各个子类,继承父类中的方法并将父类中的draw 函数重写。一些关于图形形状的类,最主要是用于画图、字体和橡皮擦等基本类型。如Circle、Triangle、Rectangle,它们都是有超类(Object类)派生的。在面向对象编程中,每个类都有画出自己的能力,每个类都有自己的draw函数,但每种形状的draw函数都不一样,但在绘制任何形状时,只需简单调用父类drawing的draw方法,然后让程序动态地根据对象的类型决定使用哪个子类的draw方法。为了使画出的图形更加美观,我们在draw函数中使用了Graphics2D的对象的引用。这样可以在不改变原程序的情况下,添加扩展的图形,是程序变得更加强大。同时,为了文件的保存,父类实现Serialize接口,将对象线性化。

四:程序结构说明

本程序主体为一个文件:QingDrawPad.java。其中包括的程序段有:

①DrawPad():构造函数,用以初始化。

②chooseColor():选择当前绘图颜色程序段。

③setStroke():设置当前画笔粗细程序段。

④loadFile():调用图形文件程序段。

⑤newFile():新建一个图形文件程序段。

⑥saveFile():保存当前所绘制图形程序段。

⑦creatNewItem():新建一个基本图形单元程序段。

相应的内部类有:

①ButtonHandler:用来处理基本图形单元的按钮事件。

②ButtonHandler1:用来处理New、Open、Save三个操作按钮的按钮事件。

③DrawPanel:用来创建绘图区域的子类。

④MouseA:继承了MouseAdapter,用来完成鼠标相应事件的操作,如单击、松开、进入和离开等。

⑤MouseB:继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动的相应事件操作。

此外,还继承了父类drawings的基本图形子类,如前所述,这里不再重复。

五:程序绘图效果示意图

我们可以看到,整个程序界面很简洁,而且界面操作、提示内容全部是中文,一目了然。在左上方的菜单栏里有文件、颜色、线条粗细、帮助4个下拉式菜单,可以对绘图文件进行相应的操作。下面一排是工具栏的工具按钮,从左到右依次为:新建文件、打开文件、保存文件、随笔画、直线、空心矩形、实心矩形、空心椭圆、空心圆、实心圆、空心圆角矩形、实心圆角矩形、橡皮擦、颜色选择按钮、线条粗细设置按钮、文字添加按钮、粗体字体选择框、斜体字体选择框、字体选择下拉式选择框。整个工具栏是可以拖动的,可以将它拖动到程序窗口的任意位置。工具栏下面的整个白色区域就是绘图区域,即绘图面板,它的大小可以随着窗口的大小自动调整。在窗口的最底部是程序设计作者标注,以及鼠标状态提示条,可以显示当前的鼠标状态,包括进出窗口、移动、单击、松开等。具体效果如下列图所示:

import java.awt.*;

import java.awt.geom.*;

import java.awt.event.*;

import javax.swing.*;

import java.io.*;

import java.util.*;

public class DrawPad extends JFrame // 主类,扩展了JFrame类,用来生成主界面

{

private ObjectInputStream input;

private ObjectOutputStream output; // 定义输入输出流,用来调用和保存图像文件private JButton choices[]; // 按钮数组,存放以下名称的功能按钮

private String names[] = { "New",

"Open",

"Save", // 这三个是基本操作按钮,包括"新建"、"打开"、"保存"

/* 下面是我们的画图板上面有的基本的几个绘图单元按钮*/

"pen", "line", "rect", "frect", "oval", "foval", "circle",

"fcircle", "roundrect", "frect", "rubber", "color", "stroke",

"word" };

private String styleNames[] = { " 宋体", " 隶书", " 华文彩云", " 仿宋_GB2312 ",

" 华文行楷", " 方正舒体", " Times New Roman ", " Serif ", " Monospaced ",

" SonsSerif ", " Garamond " };

private Icon items[];

private String tipText[] = {

// 这里是鼠标移动到相应按钮上面上停留时给出的提示说明条

"新建一个文件", "打开一个文件", "保存当前文件", "绘制线条", "绘制直线", "绘制空心矩形", "绘制实心矩形",

"绘制空心椭圆", "绘制实心椭圆", "绘制空心圆形", "绘制实心圆形", "绘制空心圆角矩形", "绘制实心圆角矩形",

"橡皮擦", "选择颜色", "设置线条粗细", "输入文字" };

JToolBar buttonPanel; // 定义按钮面板

private JLabel statusBar; // 显示鼠标状态的提示条

private DrawPanel drawingArea; // 画图区域

private int width = 850, height = 550;

drawings[] itemList = new drawings[5000]; // 用来存放基本图形的数组

private int currentChoice = 3; // 设置默认画图状态为随笔画

int index = 0; // 当前已经绘制的图形数目

private Color color = Color.black; // 当前画笔颜色

int R, G, B; // 用来存放当前色彩值

int f1, f2; // 用来存放当前字体风格

String style1; // 用来存放当前字体

private float stroke = 1.0f; // 设置画笔粗细,默认值为1.0f

JCheckBox bold, italic;

// bold为粗体,italic为斜体,二者可以同时使用

JComboBox styles;

public DrawPad() {

super("绘图画板(中国风)");

JMenuBar bar = new JMenuBar(); // 定义菜单条

JMenu fileMenu = new JMenu("文件");

// 新建文件菜单条

JMenuItem newItem = new JMenuItem("新建");

newItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

newFile(); // 如果被触发,则调用新建文件函数段

}

});

fileMenu.add(newItem);

// 保存文件菜单项

JMenuItem saveItem = new JMenuItem("保存");

saveItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

saveFile(); // 如果被触发,则调用保存文件函数段}

});

fileMenu.add(saveItem);

// 打开文件菜单项

JMenuItem loadItem = new JMenuItem("打开");

loadItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

loadFile(); // 如果被触发,则调用打开文件函数段}

});

fileMenu.add(loadItem);

fileMenu.addSeparator();

// 退出菜单项

JMenuItem exitItem = new JMenuItem("退出");

exitItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

System.exit(0); // 如果被触发,则退出画图板程序}

});

fileMenu.add(exitItem);

bar.add(fileMenu);

// 设置颜色菜单条

JMenu colorMenu = new JMenu("颜色");

// 选择颜色菜单项

JMenuItem colorItem = new JMenuItem("选择颜色"); colorItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

chooseColor(); // 如果被触发,则调用选择颜色函数段}

});

colorMenu.add(colorItem);

bar.add(colorMenu);

// 设置线条粗细菜单条

JMenu strokeMenu = new JMenu("线条粗细");

// 设置线条粗细菜单项

JMenuItem strokeItem = new JMenuItem("设置线条粗细");

strokeItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

setStroke();

}

});

strokeMenu.add(strokeItem);

bar.add(strokeMenu);

// 设置提示菜单条

JMenu helpMenu = new JMenu("帮助");

// 设置提示菜单项

JMenuItem aboutItem = new JMenuItem("关于画板");

aboutItem.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

JOptionPane.showMessageDialog(null,"此软件仅用于测试",

" 画图板说明", https://www.360docs.net/doc/4815076327.html,RMATION_MESSAGE);

}

});

helpMenu.add(aboutItem);

bar.add(helpMenu);

items = new ImageIcon[names.length];

// 创建各种基本图形的按钮

drawingArea = new DrawPanel();

choices = new JButton[names.length];

buttonPanel = new JToolBar(JToolBar.VERTICAL);

buttonPanel = new JToolBar(JToolBar.HORIZONTAL);

ButtonHandler handler = new ButtonHandler();

ButtonHandler1 handler1 = new ButtonHandler1();

// 导入我们需要的图形图标,这些图标都存放在与源文件相同的目录下面

for (int i = 3; i < choices.length; i++) {

items[i] = new ImageIcon("F:\\eclipse\\eclipse\\workspace\\Test\\src\\icon\\"+names[i]+".jpg");

choices[i] = new JButton( items[i]);

choices[i].setToolTipText(tipText[i]);

buttonPanel.add(choices[i]);

}

// 将动作侦听器加入按钮里面

for (int i = 3; i < choices.length - 3; i++) {

choices[i].addActionListener(handler);

}

/* choices[0].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

newFile();

}

});

choices[1].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

loadFile();

}

});

choices[2].addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

saveFile();

}

});*/

choices[choices.length - 3].addActionListener(handler1);

choices[choices.length - 2].addActionListener(handler1);

choices[choices.length - 1].addActionListener(handler1);

// 字体风格选择

styles = new JComboBox(styleNames);

styles.setMaximumRowCount(8);

styles.addItemListener(new ItemListener() {

public void itemStateChanged(ItemEvent e) {

style1 = styleNames[styles.getSelectedIndex()];

}

});

// 字体选择

bold = new JCheckBox("粗体");

italic = new JCheckBox("斜体");

checkBoxHandler cHandler = new checkBoxHandler();

bold.addItemListener(cHandler);

italic.addItemListener(cHandler);

JPanel wordPanel = new JPanel();

buttonPanel.add(bold);

buttonPanel.add(italic);

buttonPanel.add(styles);

styles.setMinimumSize(new Dimension(50, 20));

styles.setMaximumSize(new Dimension(100, 20));

Container c = getContentPane();

super.setJMenuBar(bar);

c.add(buttonPanel, BorderLayout.NORTH);

c.add(drawingArea, BorderLayout.CENTER);

statusBar = new JLabel();

c.add(statusBar, BorderLayout.SOUTH);

statusBar.setText("");

createNewItem();

setSize(width, height);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;

setVisible(true) ;

}

// 按钮侦听器ButtonHanler类,内部类,用来侦听基本按钮的操作

public class ButtonHandler implements ActionListener {

public void actionPerformed(ActionEvent e) {

for (int j = 3; j < choices.length - 3; j++) {

if (e.getSource() == choices[j]) {

currentChoice = j;

createNewItem();

repaint();

}

}

}

}

// 按钮侦听器ButtonHanler1类,用来侦听颜色选择、画笔粗细设置、文字输入按钮的操作

public class ButtonHandler1 implements ActionListener {

public void actionPerformed(ActionEvent e) {

if (e.getSource() == choices[choices.length - 3]) {

chooseColor();

}

if (e.getSource() == choices[choices.length - 2]) {

setStroke();

}

if (e.getSource() == choices[choices.length - 1]) {

JOptionPane.showMessageDialog(null, "请点击绘图板选择输入文本的位置", "提示",

https://www.360docs.net/doc/4815076327.html,RMA TION_MESSAGE);

currentChoice = 14;

createNewItem();

repaint();

}

}

}

// 鼠标事件mouseA类,继承了MouseAdapter,用来完成鼠标相应事件操作

class mouseA extends MouseAdapter {

public void mousePressed(MouseEvent e) {

statusBar.setText(" 作者:吴斌伟→厦门理工学院数理系09级信计1班→鼠标按下位置:[" + e.getX()

+ ", " + e.getY() + "]");// 设置状态提示

itemList[index].x1 = itemList[index].x2 = e.getX();

itemList[index].y1 = itemList[index].y2 = e.getY();

// 如果当前选择的图形是随笔画或者橡皮擦,则进行下面的操作

if (currentChoice == 3 || currentChoice == 13) {

itemList[index].x1 = itemList[index].x2 = e.getX();

itemList[index].y1 = itemList[index].y2 = e.getY();

index++;

createNewItem();

}

// 如果当前选择的图形式文字输入,则进行下面操作

if (currentChoice == 14) {

itemList[index].x1 = e.getX();

itemList[index].y1 = e.getY();

String input;

input = JOptionPane.showInputDialog("请输入你想要输入的文本");

itemList[index].s1 = input;

itemList[index].x2 = f1;

itemList[index].y2 = f2;

itemList[index].s2 = style1;

index++;

currentChoice = 14;

createNewItem();

drawingArea.repaint();

}

}

public void mouseReleased(MouseEvent e) {

statusBar.setText("鼠标的位置:" + e.getX()

+ ", " + e.getY() + "]");

if (currentChoice == 3 || currentChoice == 13) {

itemList[index].x1 = e.getX();

itemList[index].y1 = e.getY();

}

itemList[index].x2 = e.getX();

itemList[index].y2 = e.getY();

repaint();

index++;

createNewItem();

}

public void mouseEntered(MouseEvent e) {

statusBar.setText("鼠标的位置:[" + e.getX()

+ ", " + e.getY() + "]");

}

public void mouseExited(MouseEvent e) {

statusBar.setText("鼠标的位置:[" + e.getX()

+ ", " + e.getY() + "]");

}

}

// 鼠标事件mouseB类继承了MouseMotionAdapter,用来完成鼠标拖动和鼠标移动时的相应操作

class mouseB extends MouseMotionAdapter {

public void mouseDragged(MouseEvent e) {

statusBar.setText("鼠标的位置:[" + e.getX()

+ ", " + e.getY() + "]");

if (currentChoice == 3 || currentChoice == 13) {

itemList[index - 1].x1 = itemList[index].x2 = itemList[index].x1 = e

.getX();

itemList[index - 1].y1 = itemList[index].y2 = itemList[index].y1 = e

.getY();

index++;

createNewItem();

} else {

itemList[index].x2 = e.getX();

itemList[index].y2 = e.getY();

}

repaint();

}

public void mouseMoved(MouseEvent e) {

statusBar.setText(" 鼠标的位置:[" + e.getX()

+ ", " + e.getY() + "]");

}

}

// 选择字体风格时候用到的事件侦听器类,加入到字体风格的选择框中private class checkBoxHandler implements ItemListener {

public void itemStateChanged(ItemEvent e) {

if (e.getSource() == bold)

if (e.getStateChange() == ItemEvent.SELECTED)

f1 = Font.BOLD;

else

f1 = Font.PLAIN;

if (e.getSource() == italic)

if (e.getStateChange() == ItemEvent.SELECTED)

f2 = Font.ITALIC;

else

f2 = Font.PLAIN;

}

}

// 画图面板类,用来画图

class DrawPanel extends JPanel {

public DrawPanel() {

setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));

setBackground(Color.white);

// 鼠标监听事件

addMouseListener(new mouseA());

// 鼠标移动监听事件

addMouseMotionListener(new mouseB());

}

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2d = (Graphics2D) g; // 定义画笔

int j = 0;

while (j <= index) {

draw(g2d, itemList[j]);

j++;

}

}

void draw(Graphics2D g2d, drawings i) {

i.draw(g2d);// 将画笔传入到各个子类中,用来完成各自的绘图

}

}

// 新建一个画图基本单元对象的程序段

void createNewItem() {

switch (currentChoice) {

case 3:

itemList[index] = new Pencil();

break;

case 4:

itemList[index] = new Line();

break;

case 5:

itemList[index] = new Rect();

break;

case 6:

itemList[index] = new fillRect();

break;

case 7:

itemList[index] = new Oval();

break;

case 8:

itemList[index] = new fillOval();

break;

case 9:

itemList[index] = new Circle();

break;

case 10:

itemList[index] = new fillCircle();

break;

case 11:

itemList[index] = new RoundRect();

break;

case 12:

itemList[index] = new fillRoundRect();

break;

case 13:

itemList[index] = new Rubber();

break;

case 14:

itemList[index] = new Word();

break;

}

itemList[index].type = currentChoice;

itemList[index].R = R;

itemList[index].G = G;

itemList[index].B = B;

itemList[index].stroke = stroke;

}

// 选择当前颜色程序段

public void chooseColor() {

color = JColorChooser.showDialog(DrawPad.this, "请选择一种颜色", color);

R = color.getRed();

G = color.getGreen();

B = color.getBlue();

itemList[index].R = R;

itemList[index].G = G;

itemList[index].B = B;

}

// 选择当前线条粗细程序段

public void setStroke() {

String input;

input = JOptionPane.showInputDialog("请输入一个浮点型线条粗细值( >0 )");

stroke = Float.parseFloat(input);

itemList[index].stroke = stroke;

}

// 保存图形文件程序段

public void saveFile() {

JFileChooser fileChooser = new JFileChooser();

fileChooser.setFileSelectionMode(JFileChooser.FILES_ONL Y);

int result = fileChooser.showSaveDialog(this);

if (result == JFileChooser.CANCEL_OPTION)

return;

File fileName = fileChooser.getSelectedFile();

fileName.canWrite();

if (fileName == null || fileName.getName().equals(""))

JOptionPane.showMessageDialog(fileChooser, "文件名无效", "文件名无效",

JOptionPane.ERROR_MESSAGE);

else {

try {

fileName.delete();

FileOutputStream fos = new FileOutputStream(fileName);

output = new ObjectOutputStream(fos);

drawings record;

output.writeInt(index);

for (int i = 0; i < index; i++) {

drawings p = itemList[i];

output.writeObject(p);

output.flush(); // 将所有图形信息强制转换成父类线性化存储到文件中

}

output.close();

fos.close();

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

}

// 打开一个图形文件程序段,loadFile函数通过建立FileInputStream对象读入文件

public void loadFile() {

JFileChooser fileChooser = new JFileChooser();

fileChooser.setFileSelectionMode(JFileChooser.FILES_ONL Y);

int result = fileChooser.showOpenDialog(this);

if (result == JFileChooser.CANCEL_OPTION)

return;

File fileName = fileChooser.getSelectedFile();

几何画板实验报告

一.实验内容:画出一个正方形 二.实验目的:学会使用变换中的旋转按钮 三.实验步骤: ①画出一条线段; ②选中线段左端点双击,标记中心; ③选中线段和另一端点,选择变换中的旋转按钮,并设置旋转角度为90°,然后在依次做出另外两条边。 四.实验结果 实验二 一实验内容:构造三角形的中线 二实验目的:学会构造线段中点

三实验步骤: ①单击线段工具,构造出一个三角形ABC; ②选中线段AB,执行构造-中点命令,构造出AB中点D ③单击线段工具,连接CD. 四实验结果 实验三 一实验内容:构造三角形的外心 二实验目的:学会构造线段的中垂线 三实验步骤: ①单击线段工具,构造出一个三角形ABC; ②选中线段AB,执行构造-中点命令,构造出AB中点D,同时选中AB和D,执行构造-垂线

③在AC上重复②,两垂线交点即为外心 四实验结果 一实验内容:绘制三角形的内心 二实验目的:学会构造已知角的平分线 三实验步骤: ①画出任意三点A,B,C,选中A,B.C三点,执行构造-线段,构造出三角形ABC; ②依次选中B,A,C,执行构造-角平分线,构造出BAC ∠的角平分线i; ③按照②的步骤做出ABC ∠的角平分线j; ④选中i,j,执行构造-中点命令,构造出三角形内心D; ⑤选中i,j,执行显示-隐藏平分线,隐藏平分线。 四实验结果:

实验五 一实验内容:绘制函数x =的函数图像 y3 二实验目的:绘图菜单的使用方法 三实验步骤: ①执行绘图-定义坐标系命令,新建坐标系,并将原点坐标的标签设为O; ②执行数据-新建函数命令,新建函数x =; y3 ③选中函数,执行绘图-绘制函数命令,画出x =的函数图像. y3 四实验结果

几何画板十个实例教学教程

几何画板实例教程:(1)模拟时钟 1,制作表盘 打开图表----定义坐标系,以原点为圆心构造圆O,右击圆周选选择粗线,颜色任意。在圆周上取点B,选取点O、B打开菜单变换---缩放选择固定比为4:5得到点B′ 构造线段BB′右击选择粗线,选择点O 打开变换标记中心,选择线段BB′(不要断点)打开菜单变换---旋转六十度,同理旋转十一次得到 。

在圆周任意取点C,选取O和C打开菜单变换---缩放,固定比选择为9:10 得到C′构造线段CC′,选取点C和线段CC′变换旋转6°,C旋转得到点D,然后选取点C打开菜单变换---迭代,影像选择点D,迭代次数操作键盘加号得到58次:

设y轴与圆的交点为E以点0为缩放中心将点E分别缩放90%,60℅,30%,得到点F、G、H隐藏网格和坐标轴,分别构造线段OF,OG,OH并设置为虚线、细线、粗线得到图:到此为止表盘完成了。 2:制作按钮操作时钟 打开菜单图标—新建参数标签改为秒,值的精确度选择为百分之一 打开菜单度量---计算,使用函数trunc分别计算一下结果:秒针旋转的角度、分针的旋转角度、时针的旋转角度。

选取参数“秒=1”打开编辑---操作类按钮—动画 范围设置为0到86400(一天一夜二十四小时共86400秒),标签改为“启动时钟”。 再次选择参数秒同上面一样打开动画按钮,不同的是把范围改为0到0.001,(此范围保证各指针的旋转的角度为0°),标签改为“归零”

选取打开菜单变换---标记角度,然后选取秒针(即图中的虚线)做变换—旋转变换,同理再分别选取分针和时针的旋转角度

做分针和时针的旋转变换。 此时点击启动时钟和归零就可以得到时钟的转动的效果了。(没有用的线可以隐藏了) 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简单画板程序设计实验报告

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实验报告一

Java语言程序设计实验报告一 班级:姓名:学号: 一、实验教学目的与基本要求 Java程序设计的实验是Java程序设计课程重要的实践教学环节。实验的目的不仅仅是验证理论知识,更重要的是通过上机加强学生的动手能力,掌握常用Java开发环境的使用方法,培养学生分析问题、解决问题、应用知识的能力和创新精神。充分放手让学生自行设计、自主调试,真正培养学生的实践动手能力,全面提高学生的综合素质。 本课程是一门程序设计语言课程,通过本课程的学习,学生能够掌握Java 语言程序的基本特点、基本编程方法和基本开发技巧,培养学生阅读、分析、设计和调试Java语言的能力,并具备一定的面向对象程序设计思想。 本课程的主要任务是在已学习的编程语言基础上,讲述Java语言的数据结构和语法规则;基本控制结构和编程技巧;Java语言面向对象的特点、编程方法和程序设计思路;Java语言的GUI程序和文件及I/O流的编程方法;能够正确配置Java开发环境,并使用相关的编辑、编译、调试、运行命令。 (1)掌握Java语言的编程技巧,能够独立进行面向对象的开发能力。 (2)具有根据编程需求独立查询Java类库文档及相关资料,完成系统的能力。 (3)具有分析、寻找和排除程序中常见问题的能力。 二、实验内容与收获 (1)Java的安装与配置。熟悉语言环境及简单程序设计的使用练习,正确配置Java 开发环境(Eclipse 集成开发环境的安装、配置与使用) a)安装JDK Sun公司为所有的Java程序员提供了一套免费的Java开发和运行环境。 可以通过IE或Netscape浏览器浏览网址:https://www.360docs.net/doc/4815076327.html,/j2se,根据提示

实验二、应用轨迹与跟踪功能绘制图形(几何画板)

实验二、应用轨迹与跟踪功能绘制图形 一、实验目的: 认识、分清主动点和被动点,学会应用轨迹与追踪功能绘制图形 二、实验内容 1、作出双曲线、抛物线的轨迹 2、设ABCD为矩形,P是AB上的一动点,过P作PE⊥AC于E,PF⊥BD于F, (1)作出EF的中点轨迹。 (2)作出线段EF运动的轨迹。 3、三角形ABC顶点A在一定圆上运动,另外两个顶点固定,作出三角形ABC外心的轨迹。并讨论分出各种情形。 4、作出与已知定圆、定直线都相切的圆的圆心的轨迹。 三、实验步骤 1、(1)做一条射线,取端点A和射线上一点B构成线段作为定长2a 做一条直线,上面取两点F1 、F2为焦点。|F1 F2| >|AB| 再在射线上取点C 构造线段AC、BC 以F1为圆心,AC为半径做圆,F2为圆心,BC为半径做圆。 两圆相交的两点分别记为F、G。 选中点C、F构造轨迹,选中点C、G构造轨迹。则得到双曲线的一支。同理作图得双曲线另一支。 (2)做一条直线,取点上两点A、B 构造线段AB,并以A为圆心,AB为半径做圆,交直线于点C

选中点A和直线构造垂线I 在此垂线上取一点E。 选中点E和垂线I,构造垂线m。 选中点E、B构造线段。并选择它作中点F。 选中F和线段构造垂线n。 m与n交于一点G。 选中点E、G构造轨迹。则得到抛物线。 2、(1)制作矩形ABCD,取P上一点。连接AC、BD。 选中P和AC构造垂线,与AC的交点为E。 选中P和BD构造垂线,与BD的交点为F。 选中E、F构造线段。选择线段EF构造中点。 选中P、及EF的中点构造轨迹。 (2)选中点P及线段EF构造轨迹。 3、在平面上作一个圆。取圆上一点O。构造三角形BCD 分别取三条边的中点作垂线。三条垂线交于一点即是外心E。 选中点A和外心E,构造轨迹。 讨论:当三角形为锐角三角形时,轨迹在三角形内或与三角形最长边相交;当三角形为直角三角形,该轨迹的一个端点为三角形斜边中点,其他点均在三角形外,并平行于竖直的直角边;当三角形为钝角时,轨迹完全在三角形外,或与三角形最长边相交。 结论:外心运动轨迹在定点CD边所做的中垂线上。 4、构造定圆O和定直线k。

几何画板视频教程全集(完整)(完整资料).doc

此文档下载后即可编辑 几何画板视频教程全集(完整) 一、绘制几何图形和几何体[本章实例下载] 实例1 利用画点工具任意画三点 实例2 绘制线段 实例3 绘制过同一点的三条直线 实例4 绘制相同端点的三条射线 实例5 绘制三个同心圆 实例6 绘制共点圆 实例7 绘制圆在第一象限内的部分 实例8 绘制三角形的中线 实例9 绘制三角形的三条角平分线 实例10 绘制三角形的三条高 实例11 绘制相邻两边可以随意改变的平行四边形实例12 绘制菱形 实例13 绘制梯形的中位线 实例14 绘制等腰梯形 实例15 绘制正三角形 实例16 绘制正五边形 实例17 绘制关于某条直线对称的两个全等的三角形实例18 绘制关于某点对称的两个三角形 实例19 绘制相似三角形 实例20 绘制五角星 实例21 绘制正方体 实例22 绘制相邻三条棱可改变的三棱柱 实例23 绘制三棱台 实例24 绘制圆柱 实例25 绘制圆锥 实例26 绘制圆台

二、制作度量型课件[本章实例下载] 实例1 验证三角形的中位线定理 实例2 验证圆幂定理 实例3 验证三角形内角和 实例4 验证圆周角与圆心角的关系实例5 验证同底等高三角形面积相等实例6 验证三角形的面积公式 实例7 验证勾股定理 实例8 验证两点间的距离公式 实例9 验证正弦定理 实例10 验证两平行线间的斜率关系实例11 验证余弦定理 实例12 绘制分段函数

三、制作图像型课件[本章实例下载] 实例1 二次函数的图像 实例2 指数函数的图像 实例3 对数函数的图像 实例4 函数y=sinx的图像 实例5 绝对值函数的图像 实例6 可变系数的二次函数的图像 实例7 可变系数的三角函数的图像 实例8 定义在区间[a,b]上的函数的图像实例9 椭圆的参数方程 实例10 星形线 实例11 圆锥曲线的统一方程 实例12 心脏线

计算机图形学课程设计报告交互式绘图系统

课程设计报告 课程名称计算机图形学 课题名称交互式绘图系统 专业计算机科学与技术 班级 学号 姓名 指导教师刘长松曹燚 2012年10 月9 日

湖南工程学院 课程设计任务书 课程名称计算机图形学 课题交互式绘图系统 专业班级 学生姓名 学号 指导老师刘长松曹燚 审批 任务书下达日期2012年9月15 日任务完成日期2012 年10月9 日

一、设计内容与设计要求 1.设计内容: 用橡皮法实现交互式绘图系统。 2.设计要求: 在屏幕上可以选择不同的命令、来实现不同基本图形的绘制。完成橡皮筋直线,橡皮筋圆,橡皮筋矩形框,多边形裁剪和3阶B样条曲线的作图,且要有比较友好的界面。 3.算法提示: 首先在屏幕上画出菜单和绘图窗口,显示鼠标。点击相应菜单,点击鼠标,移动鼠标,获取鼠标移动相对位置,画出相应图形。 相关变量定义: #define _MOUSE鼠标#define CIRCLE 1圆 #define LINE 2直线#define RECTANGLE 3矩形#include "stdio.h" #include "string.h" #include"graphics.h" #include"math.h" #include union REGS inreg,outreg; struct SREGS sr; 相关函数: void meun(int x,int y,char *str) { setcolor(8); outtextxy(x+5,28,str); setcolor(15); line(x,22,x,40); line(x,22,y,22); setcolor(8); line(x,40,y,40); line(y,22,y,40); }

几何画板实验报告(函数y=Asin(ωx+φ)图象)

实验报告 实验项目:设计制作课堂教学型的课件 班级:姓名: 学号:实验时间:2013 年月日 一、实验目的:通过计算机辅助教学的理论与实践相结合,查阅资料,设计制作中学数学某一节课(自选内容)的课堂教学型课件,在实验过程中掌握课堂教学型课件设计方法与制作技巧。 二、实验设备:多媒体计算机、几何画板等 三、教学设计方案

四、课件的创作思路 按照课本要求,考虑到函数y=Asin(ωx+φ)的图象相对难掌握,特选取几何画板作为课件的制作软件。课件设计由浅入境,通过对旧知识点的回顾复习,再慢慢计入新知识点的学习,以问题为基本主导线,注重学生自主动手,自主学习能力,通过讨论,探讨问题渐渐深入课程学习,渐渐把握参数φ、ω、A对函数y=Asin(ωx+φ)的图象的影响。所以课件在设计中看重问题,情景的设计,以及如何让学生更容易,更直观地了解,掌握参数φ,ω,A对函数y=Asin(ωx+φ)的图象的变换规律。讲授新知识点后及时进行例题讲解,让学生查漏补缺,真正把知识学懂,学通,学透,本课件按照人教版要求,符合普遍学生的学习接受能力,通过提出问题观察图片,吸引学生的注意力,以带动学生思考问题。在传递新内容上,通过图文解说,形象表达学习内容,层次分明,能让学生容易理解、学习和掌握知识。学习完新知识后,进行一段小结,巩固学生记忆。最后布置几道与这节课内容相关的习题,是为了巩固本节课内容。使学生通过本节课,能基本掌握参数φ,ω,A对函数y=Asin(ωx+φ)的图象的变换规律。 五、思考题

分析课件所使用的媒体在课堂教学实践中的作用。 本课件主要应用了几何画板软件,应用几何画板的“形象、直观”的动态效果,能很好的演示课本上的内容和几何图片,容易让学生理解掌握新概念。本节课的一些思考及练习,能很好的培养学生的发散思维,达到举一反三的目的。几何画板的重要作用就是能准确地表达几何图像。本课件适用大部分地区高中学校的课堂教学。

最全的几何画板实例教程

上篇用几何画板做数理实验 图1-0.1 我们主要认识一下工具箱和状态栏,其它的功能在今后的学习过程中将学会使用。 案例一四人分饼 有一块厚度均匀的三角形薄饼,现在要把它平 均分给四个人,应该如何分? 图1-1.1 思路:这个问题在数学上就是如何把一个三角形分成面积相等的四部分。 方案一:画三角形的三条中位线,分三角形所成的四部 分面积相等,(其实四个三角形全等)。如图1-1.2。 图1-1.2

方案二:四等分三角形的任意一边,由等底等高的三角形面积相等,可以得出四部分面积相等,如图1-1.3。 图1-1.3 用几何画板验证: 第一步:打开几何画板程序,这时出现一个新绘图文件。 说明:如果几何画板程序已经打开,只要由菜单“文件”→“新绘图”,也可以新建一个绘图文件。 第二步:(1)在工具箱中选取“画线段”工具; (2)在工作区中按住鼠标左键拖动,画出一条线段。如图 1-1.4。 注意:在几何画板中,点用一个空心的圈表示。 图1-1.4 第三步:(1)选取“文本”工具;(2)在画好的点上单击左键,可以标出两点的标签,如图1-1.5: 注意:如果再点一次,又可以隐藏标签,如果想改标签为其它字母,可以这样做: 用“文本”工具双击显示的标签,在弹出的对话框中进行修改,(本例中我们不做修改)。如图 1-1.6 图1-1.6 在后面的操作中,请观察图形,根据需要标出点或线的标签,不再一一说明 B 图1-1.5 第四步:(1)再次选取“画线段”工具,移动鼠标与点A 重合,按左键拖动画出线段AC ;(2)画线段BC ,标出标签C ,如图1-1.7。 注意:在熟悉后,可以先画好首尾相接的三条线段后再标上标签更方便。 B 图1-1.7 第五步:(1) 用“选择”工具单击线段AB ,这时线段上出现两个正方形的黑块,表示线段处于被选取状态;(2) 由菜单“作图”→“中点”,画出线段AB 的中点,标上标签。得如图1-1.8。 注意:如果被选取的是点,点的外面会有一个粗黑圆圈。在几何画板中,选取线段是不包括它的两个端点的,以后的问题都是这样,如果不小心多选了某个对象,可以 B C D 图1-1.8

画图工具可行性报告

Java实训课程设计报告Windows画图工具 专业:计算机科学与技术班级:11092311 姓名:曾思哲 学号:11923110

2014年6月

项目简介

Windows画图工具的设计 第1章需求分析 1.1 项目背景 随着社会的不断发展,人们对画面要求越来越高,对画图工具的软件提出了更高的要求。 画图工具的软件可以让用户更加节省时间,可以从其他文件找出一些图片修改一下就可以使用,比起传统的手工的画图来说,不单单是节省时间而且画面要好的多,保存起来也比较方便,下次在用的时候一找就出来了。在比如画面的修改在这套软件上我们可以直接使用彩色,使画面更直观,而且还可以修改,画图的软件现在应用于各行各业,这款软件特别适合教学用,学生画图也是比不可缺少的。 1.2 需求分析 需求分析是从客户的需求中提取出软件系统能够帮助用户解决的业务问题,通过对用户问题的分析,确定系统的功能需求。这个步骤是对理解需求的升华,直接关系到该系统的质量。分析的根本目的是在开发者和提出需求的人之间建立一种理解和沟通机制,因此,系统的需求分析也应该是开发人员和用户或客户一起完成的。 1.2.1画图板的性能要求 (1) 统一处理的准确性和及时性。 (2) 软件的开放性和可扩充性。 (3) 软件的易用性和易维护性。 1.2.2画图板的功能分析 我们作的是Windows画板,再设计时应该考虑到用户的需要和画图的习惯。所以我们需求分析的主要任务就是来了解用户画图时的习惯。尽量让用户满意。在此我们是先设计一个大概的程序模型让别人试试我的画图板。

第2章概要设计 2.1 软件设计 1.1.1 本软件是设计一套在windows平台下的画图工具,主要用于主要用于画图、打开图画类的页面修改并保存成用户需要的格式。系统采用C/S结构,主要用于客户端,供客户学习、工作使用,本软件提供良好的界面,操作简单。 第3章详细设计 3.1 模块设计 该系统由4个模块构成,分别是工具模块、储存模块、颜色模块、帮助模块。 ●工具模块 画笔(PencilTool)、格式刷(BrushTool)、喷墨工具(AtomizerTool)、橡皮(EraserTool)、直线(LineTool)等主要用于不同情况的使用,在面板上方便用户的使用。 ●储存模块 ①判断当前画板是否保存(MyImage)。 ②设置多种存储的格式供用户选择,增加文件过滤器(addFilter)。 ③存储路径可以设置默认的。 ●颜色模块 通过创建颜色选择器(ColorChooser),来让用户获取颜色,供用户使用。 ●帮助模块 系统帮助文档和软件的声明。 3.2 功能设计 主要功能如下: 1、画笔 PencilTool这个类继承于AbstractTool类,PencilTool类中有个对象Tool 用户通过点击画板上的图标来获取画笔,它的功能让用户用来画出各种图形。 2、格式刷子 BrushTool这个类继承于AbstractTool类,它的功能让用户画出更好的图形。

软件工程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.在规定的限期内,本程序能够完成; 法律方面的可行性 本程序不会在后台扫描用户的磁盘文件; 本程序为完全免费,没有任何盈利行为,而且仅在内部流通,不予推广,所以不涉及浸犯微软版权的行为,所以本软件完全合法。 软件服务条款要与中华人民共和国的法律解释相一致,一致同意服从高等法院所有管辖。如发生软件服务条款与中华人民共和国法律相抵触时,则这些条款将完全按法律规定重新解释,而其它条款则依旧保持对用户产生法律效力和影响。 经济可行行

使用“平移”“旋转”与“轨迹”功能绘制复杂几何图形

几何画板实验报告:使用“平移”“旋转”与“轨迹”功能绘制复 杂几何图形 一、实验目的 掌握“平移”“旋转”与“轨迹”功能及其应用,能熟练将前两者结合绘制复杂图形。 二、实验内容 题目1、绘制正五边形并设置控制按钮使其绕中心旋转180度。 步骤:1、先绘制正五边形。 (1)、任意绘制一条线段,选择旋转72度,连续旋转5次(图1) (2)、连接端点,构成正五边形并得出中点O(图2) 图1 图2 2、【构造】一个圆E,【构造】圆上的半段弧GF,并【构造】弧上的一点D(图3) 图3 图4 3、设定角度DEF为标记角度,选中正五边形,点击【变换】,【旋转】,选择标记角度并以中心O为旋转中心。(图4) 4、选中点G,E选择【编辑】,【操作类按钮】,【移动】命令,得到名为“从D→G移动”的按钮,同理得名为“从D→F移动”的按钮.图5为旋转180度的图像和两个按钮。

图5 题目2、作出圆柱及过其棱上一点且与底面平行的截面。并设置截面的平行移动。 步骤:1、作出一个同心圆A,过A作水平线,在大圆上任取一点E作水平线的垂线EF,连接AE与小圆交于点G,过点G作EF的垂线,交于点H,以E为主动点,H为被动对象构造轨迹,一次选中点E和点H【构造】【轨迹】,即圆柱的底面。(图1) 图1 图2 2、将其余图形隐藏,只留下椭圆。过椭圆中点A作水平线交于G,过A点作AG的垂线AF,并标记AF向量;将G绕A点旋转180度到G’点,在椭圆上任取一点H,将H沿AF向量的方向平移到H’点,再以H为主动点,H’为被动对象构造轨迹,得到圆柱的上底面也是一个椭圆;同理将G与G’也平移上去,再连接棱,即得到圆柱;( 图2) 3、在棱G’C上任取一点N,标记G’N向量,把H按照J’N向量的方向平移到H’’点,同样以H为主动点,H’’为被动对象构造轨迹,得到截面;(图3)

几何画板实验报告要点

实验一数学教学软件基本操作 一、实验目的: 二、实验内容: 1、作出三角形的垂心。 2、作出三角形的外接圆与内切圆。 外接圆 内切圆 3、验证:三角形三边的中点、三条高的垂足、垂心到三顶点的中点共圆。

4、作出两圆的内外公切线。 三、实验步骤 1、作出三角形的垂心。 步骤: ○1构造△ABC; ○2选中点A和线段BC,构造垂线; ○3同理,构造线段AB、BC上的垂线; ○4交点D即为垂心。 2、作出三角形的外接圆与内切圆。 外接圆步骤:

○1构造△ABC; ○2选中线段AB,构造中点E; ○3选中线段AB和点E,构造垂线; ○4同理构造线段AC、BC上的中垂线,交点为K; ○5选中点K、A,构造圆。 内切圆步骤: ○1构造△ABC; ○2选中线段AB、AC,构造角平分线; ○3选中AB、BC,构造角平分线,交点为D; ○4选中A、D,构造圆。 3、验证:三角形三边的中点、三条高的垂足、垂心到三顶点的中点共圆。 步骤: ○1构造△ABC; ○2选中线段AB、BC、AC分别构造中点D、E、F; ○3选中线段BC和点A构造垂线,垂足为H,同理得到垂足L、K,三条 垂线的交点为M; ○4选中点A和M构造线段,再选中线段AM构造中点O,同理得到点N、P; ○5选中点E、P、O构造过三点的弧,选中点O、D、E构造过三点的弧; 4、作出两圆的内外公切线。 外公切线步骤: ○1构造两圆C、D,圆心分别为C、D(注:圆C 的半径大于圆 D 的半径); ○2选中点C、D,构造直线CD; ○3在圆D 上任意取一点F,连接构造线段DF; ○4选中点C、线段DF,构造平行线交圆 C 于点G、P ○5选中点G、F,再构造直线GF 交直线CD 于点H; ○6选中点D、H,构造线段DH,再构造线段DH 的中点M; ○7依次选中M、D(H),接着“构造”—“以圆心和圆周上的点作圆”—“生成一个圆M 交圆 D 于点O 和N ; ○8分别构造出直线OH 和直线NH,即为所求的外公切线。 内公切线步骤: ○1构造线段FP 交直线CD 于点Q; ○2选中点C、Q,构造线段,再构造中点R; ○3依次选中点R、C(Q),构造圆交圆C 于点S、T; ○4分别构造出直线QT 和直线QS,即为所求的内公切线。 四、实验的结论及实验中存在的问题。

的几何画板实例教程

上篇用几何画板做数理实验 图1-0、1 我们主要认识一下工具箱与状态栏,其它的功能在今后的学习过程中将学会使用。 案例一四人分饼 有一块厚度均匀的三角形薄饼,现在要把它平 均分给四个人,应该如何分? 图1-1、1 思路:这个问题在数学上就就是如何把一个三角形分成面积相等的四部分。 方案一:画三角形的三条中位线,分三角形所成的四部分 面积相等,(其实四个三角形全等)。如图1-1、2。 图1-1、2

方案二:四等分三角形的任意一边,由等底等高的三角形面积相等,可以得出四部分面积相等,如图1-1、3。 图 1-1、3 用几何画板验证: 第一步:打开几何画板程序,这时出现一个新绘图文件。 说明:如果几何画板程序已经打开,只要由菜单“文件”→“新绘图”,也可以新建一个绘图文件。第二步:(1)在工具箱中选取“画线段”工具; (2)在工作区中按住鼠标左键拖动,画出一条线段。如图 1-1、4。 注意:在几何画板中,点用一个空心的圈表示。 图1-1、4 第三步:(1)选取“文本”工具;(2)在画好的点上单击左键, 可以标出两点的标签,如图1-1、5: 注意:如果再点一次,又可以隐藏标签,如果想改标签为其它字母,可以这样做: 用“文本”工具双击显示的标签,在弹出的对话框中进行修改,(本例中我们不做修改)。如图1-1、6 图1-1、6 在后面的操作中,请观察图形,根据需要标出点或线的标签,不再一一说明 B 图1-1、5 第四步:(1)再次选取“画线段”工具,移动鼠标与点A重 合,按左键拖动画出线段AC;(2)画线段BC,标出标签C,如 图1-1、7。 注意:在熟悉后,可以先画好首尾相接的三条线段后再标 上标签更方便。 B 图1-1、7 第五步:(1) 用“选择”工具单击线段AB,这时线段上出现 两个正方形的黑块,表示线段处于被选取状态;(2) 由菜单 “作图”→“中点”,画出线段AB的中点,标上标签。得 如图1-1、8。 注意:如果被选取的就是点,点的外面会有一个粗黑圆 圈。在几何画板中,选取线段就是不包括它的两个端点 的,以后的问题都就是这样,如果不小心多选了某个对象,可以按Shi f t键后用左键再次单击该对象取消选取。 B D 图1-1、8

Java画图板课程设计报告

目录 1 引言................................................................................................... 错误!未定义书签。 课程设计选题 .................................................................................. 错误!未定义书签。 课程设计的目的 .............................................................................. 错误!未定义书签。 本选题的设计背景.......................................................................... 错误!未定义书签。 2 需求分析 .............................................................................................. 错误!未定义书签。 功能需求......................................................................................... 错误!未定义书签。 软件开发运行环境........................................................................ 错误!未定义书签。 3 总体设计 .............................................................................................. 错误!未定义书签。 软件结构设计 ................................................................................ 错误!未定义书签。 结构设计................................................................................. 错误!未定义书签。 软件功能模块及主要类设计 ......................................................... 错误!未定义书签。 功能描述 ................................................................................... 错误!未定义书签。 总体结构图............................................................................... 错误!未定义书签。 主要类设计............................................................................... 错误!未定义书签。 4 详细设计与实现.................................................................................. 错误!未定义书签。 主界面............................................................................................. 错误!未定义书签。 主界面功能设计....................................................................... 错误!未定义书签。 主界面设计............................................................................... 错误!未定义书签。 主界面主要代码....................................................................... 错误!未定义书签。 菜单栏............................................................................................. 错误!未定义书签。 菜单栏功能设计....................................................................... 错误!未定义书签。 菜单栏界面设计....................................................................... 错误!未定义书签。 菜单栏主要代码....................................................................... 错误!未定义书签。 工具栏............................................................................................. 错误!未定义书签。 工具栏功能设计....................................................................... 错误!未定义书签。 工具栏界面设计....................................................................... 错误!未定义书签。 工具栏主要代码....................................................................... 错误!未定义书签。

用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:位图

相关文档
最新文档