当前位置:文档之家› Java典型模块与项目实战大全(第13章)_IT168文库

Java典型模块与项目实战大全(第13章)_IT168文库

Java典型模块与项目实战大全(第13章)_IT168文库
Java典型模块与项目实战大全(第13章)_IT168文库

第13章鼠标绘直线(绘图+事件)

在Java语言中利用绘图机制可以绘制许多图形,对于图形用户界面来说,一些简单的图形是必须的,所以程序员必须掌握绘图机制。对于一个应用程序,如果想实现与用户良好的互动功能,除了事件处理机制外,对于绘图的处理也是必不可少的。本章不仅通过鼠标绘直线的功能介绍Java语言中的绘图机制和事件处理机制,而且还详细介绍绘图的基础知识。

本章的学习目标如下:

?掌握鼠标绘直线项目;

?理解为什么要使线程具有同步性;

?掌握实现线程同步的两种方式。

13.1 鼠标绘直线原理

“鼠标绘直线”项目用来模拟用鼠标绘直线的功能,在具体使用时首先用鼠标左键单击画布,然后拖动鼠标到另一个地方,最后释放鼠标左键。这时不仅在两点间绘制直线,同时还将显示出端点的坐标。

13.1.1 项目结构框架分析

对于鼠标绘直线项目,根据面向对象的思想,需要创建两个对象,即直线和窗口。鼠标绘直线项目目录如图13.1所示,各个目录的功能如下。

?包com.cjg.repaine:通过重画技术实现鼠标绘直线功能。

?包com.cjg.buffer:通过双缓冲技术实现鼠标绘直线功能。

图13.1 项目目录

13.1.2 项目功能业务分析

本节将向读者介绍整个项目要实现的功能。这些功能包括鼠标绘直线的初始化,按住

第3篇 GUI (图形用户界面)开发

·232·

鼠标功能和放开鼠标后的功能。

1.初始化界面

当运行鼠标绘直线项目中的类DrawLine 后,就会出现如图13.2所示的初始界面,该界面只是一个窗口。

图13.2 初始界面

2.画点和鼠标绘直线功能

如果想绘制点时,只要用鼠标左键单击画布,然后释放鼠标左键,这时就会在画布中显示出一个点,同时显示出该点的坐标。如果想绘制直线,需要在画布中单击鼠标左键,然后在不释放鼠标键的情况下移动鼠标,最后在画布的其他地方释放左键。这时就会在鼠标单击的两个地方之间显示出一条直线,同时会显示出直线端点的坐标,具体过程如图13.3所示。

图13.3 绘制的具体过程

第13章 鼠标绘直线(绘图+事件)

·233·

3.重绘功能

将窗口最小化后再恢复正常化显示的过程,其实就是重绘的过程。如果考虑重绘功能,

恢复正常化显示就会出现正常的窗口;否则就会出现空白窗口,具体过程如图13.4所示。

图13.4 重绘的过程

13.2 鼠标绘直线的实现过程

本节通过绘图机制和事件机制的相关知识来实现鼠标绘直线项目,具体程序架构如图13.5所示,它包含一个直线的类MyLine.java 和一个窗口的类DrawLine.java 。

图13.5 程序关系图

13.2.1 直线的类

MyLine.java 类用来模拟直线对象,该类除了拥有直线端点的坐标成员变量外,而且还

拥有一个画自己的drawMe()方法,具体内容如代码13.1所示,该类的UML 如图13.6所示。

第3篇 GUI (图形用户界面)开发

·234·

图13.6 直线类图

代码13.1 直线类:MyLine.java class MyLine {

//创建成员变量

private int x1; //直线起点的x 坐标

private int y1; //直线起点的y 坐标

private int x2; //直线终点的x 坐标

private int y2; //直线终点的y 坐标

public MyLine(int x1, int y1, int x2, int y2) {//构造函数

this.x1 = x1;

this.y1 = y1;

this.x2 = x2;

this.y2 = y2;

}

public void drawMe(Graphics g) {

g.setColor(Color.red); //设置绘图颜色为红色

//设置文本的字体

g.setFont(new Font("隶书", Font.ITALIC | Font.BOLD, 30));

g.drawString(new String(x1 + "," + y1), x1, y1);

//打印鼠标按下时的坐标文本 g.drawString(new String(x2 + "," + y2), x2, y2);

//打印鼠标释放时的坐标文本 g.drawLine(x1, y1, x2, y2); //绘制直线

}

}

【代码解析】

在上述代码中,该类拥有4个字段x1、y1、x2和y2,同时在drawMe()方法中通过drawString()和drawLine()方法绘制出相应的端点坐标和直线。

13.2.2 实现窗口类——通过paint()方法

DrawLine 类主要通过paint()方法实现具有鼠标绘制直线功能的窗口,该类的具体内容如代码13.2所示,该类的UML 如图13.7所示。

图13.7 绘制类图

第13章鼠标绘直线(绘图+事件)

代码13.2 窗口类:DrawLine.java

public class DrawLine extends Frame {

Vector vLines = new Vector(); //集合变量

public static void main(String[] args) {

DrawLine f = new DrawLine(); //创建DrawLine对象

f.init(); //初始化

}

public void paint(Graphics g) { //重写paint()方法

g.setColor(Color.red); //设置颜色

//遍历集合元素

Enumeration e = vLines.elements();

while (e.hasMoreElements()) {

MyLine ln = (MyLine) e.nextElement(); //获取直线元素

ln.drawMe(g); //鼠标绘直线

}

}

public void init() { //初始化方法

this.addWindowListener(new WindowAdapter() {//窗口关闭的方法

public void windowClosing(WindowEvent e) {

((Window) e.getSource()).dispose();

System.exit(0);

}

});

addMouseListener(new MouseAdapter() { //鼠标的监听器

//直线起点的坐标

int orgX;

int orgY;

public void mousePressed(MouseEvent e) { //鼠标的按下方法

orgX = e.getX(); //为直线起点赋值

orgY = e.getY();

}

public void mouseReleased(MouseEvent e) { //鼠标释放的方法

//获取事件源对象

Graphics g = e.getComponent().getGraphics();

//设置文本的字体

g.setFont(new Font("隶书", Font.ITALIC | Font.BOLD, 30));

g.setColor(Color.red); //设置颜色

//绘制鼠标按下时的坐标文本

g.drawString(new String(orgX + "," + orgY), orgX, orgY);

//绘制鼠标释放时的坐标文本

g.drawString(new String(e.getX() + "," + e.getY()),

e.getX(), e.getY());

g.drawLine(orgX, orgY, e.getX(), e.getY());//绘制直线

//添加到集合中

vLines.add(new MyLine(orgX, orgY, e.getX(), e.getY()));

}

});

this.setSize(300, 300); //设置窗口大小

setVisible(true); //显示窗口}

}

【代码解析】

在上述代码中存在一个实现初始化功能的init()方法,在该方法中主要实现了两个事件监听器窗口监听器和鼠标监听器。在鼠标监听器中,鼠标按下的方法中实现

·235·

第3篇GUI(图形用户界面)开发

·236·了对直线端点的赋值;鼠标释放的方法中,首先获取了鼠标释放时的坐标,然后不仅绘制出直线而且还输出端点的坐标,最后还将直线添加到集合中。在窗口监听器中,主要实现了窗口的关闭功能。

?在上述代码中还存在一个实现重新绘制功能的paint()方法,在该方法中首先遍历集合,然后通过调用MyLine. drawMe()方法输出集合中的所有直线。

注意:由于上述代码需要重写paint()方法来实现重绘功能,所以继承了Frame类。13.2.3 实现窗口类——通过双缓冲技术

DrawLine类主要通过双缓冲技术来实现具有鼠标绘制直线功能的窗口,该类的具体内容如代码13.3所示,该类的UML如图13.8所示。

图13.8 绘制的类图

代码13.3 窗口类:DrawLine.java

public class DrawLine extends Frame {

//成员变量

Image oimg = null;

Graphics og = null;

public static void main(String[] args) {

new DrawLine().init(); //调用初始化方法}

public void init() { //实现初始化方法

setSize(300, 300); //设置窗口大小

setVisible(true); //显示窗口

Dimension d = getSize();

oimg = createImage(d.width, d.height);

og = oimg.getGraphics();

addMouseListener(new MouseAdapter() {

//创建直线端点的成员变量

int orgX;

int orgY;

public void mousePressed(MouseEvent e) {

//为直线端点的成员变量赋值

orgX = e.getX();

orgY = e.getY();

}

public void mouseReleased(MouseEvent e) {

//g对象的设置

Graphics g = getGraphics(); //获取Graphics对象

g.setColor(Color.red); //设置绘图颜色为红色

第13章鼠标绘直线(绘图+事件)

//设置文本的字体

g.setFont(new Font("隶书", Font.ITALIC | Font.BOLD, 30));

//输出鼠标按下时的坐标文本

g.drawString(new String(orgX + "," + orgY), orgX, orgY);

//输出鼠标释放时的坐标文本

g.drawString(new String(e.getX() + "," + e.getY()),

e.getX(), e.getY());

//创建MyLine对象

MyLine line = new MyLine(orgX, orgY, e.getX(), e.getY());

line.drawMe(g); //调用drawMe()方法

//og对象的设置

og.setColor(Color.red); //设置绘图颜色为红色

//设置文本的字体

og.setFont(new Font("隶书", Font.ITALIC | Font.BOLD, 30));

//输出鼠标按下时的坐标文本

og.drawString(new String(orgX + "," + orgY), orgX, orgY);

//输出鼠标释放时的坐标文本

og.drawString(new String(e.getX() + "," + e.getY()),

e.getX(),e.getY());

line.drawMe(og); //调用drawMe()方法

}

});

}

public void paint(Graphics g) { //实现paint()方法

if (oimg != null)

g.drawImage(oimg, 0, 0, this);

}

}

【代码解析】

?在上述代码中存在一个实现初始化功能的init()方法,在该方法中首先通过组件的createImage()方法在内存中创建一个Image对象oimg,然后通过该对象的

getGraphics()方法获取og对象。

?在init()方法中还存在一个鼠标监听器,鼠标按下的方法中,实现了对直线端点的赋值;在鼠标释放的方法中,不仅把直线绘制在组件上,而且还绘制在内存中的

oimg对象上,即oimg对象上的图形是组件表面内容的复制。

?最后在重新绘制paint()方法,把内存中的oimg对象上的图形重绘在组件上。

13.3 知识点扩展——画图的基础知识

查看API帮助文档,如果想要在GUI组件上绘制图形、打印文字、显示图像等操作,需要分成两个步骤:首先组件需要通过getGraphics()方法获取类Graphics对象,然后Graphics对象通过相应的方法实现各种所需的功能。

13.3.1 画图的基础知识

无论在组件上画一条线、一个矩形或者一张图片等,都需要Graphics类。该类不仅包含了组件的屏幕外观信息,而且还提供了在组件上显示表面绘画图形、打印文字和显示图

·237·

第3篇 GUI (图形用户界面)开发

·238·

像等操作方法。

如果想学好Java 语言中的绘图功能,需要从基本的类和方法开始,下面详细介绍。

1.Graphics 类

由于Graphics 类是抽象类,所以不能直接产生对象来使用,同时也没有static()方法直接获取。那么在Java 应用程序中如何获取Graphics 对象呢?通常有以下两种方式。

? 通过系统获取:所有Component 对象都会有一个名为getGraphics()的方法,该方

法会获取作用于该Component 对象上的Graphics 对象。所谓作用于Component 对象,是指该对象的任何绘画的动作,都只会显示在这个对象上。

? 通过Image 类获取:尽管Image 类同样拥有一个名为getGraphics()的方法,但是该

类并不是Component 类的子类。

2.paint()方法和repaint()方法

在Java 应用程序中,一般不自己产生Graphics 对象来使用,而是去改写paint()方法,在该方法的方法体中调用传递进来的Graphics 对象。所谓paint()方法,就是负责处理Component 对象画面,即当Component 对象觉得需要更新自己的画面时,就会调用该方法。查看API 帮助文档,可以发现paint()方法为Component 类的一个方法,其拥有一个传入参数,该参数就是Graphics 对象。

注意:如果想让所画的东西一直显示在组件上,就需要继承该组件类,同时改写paint()

方法。

根据字面意思可以知道,repaint 为重新paint 的意思,方法repaint()与paint()的关系如图13.9所示。即当Component 对象觉得需要更新自己的画面时,就会运行paint()方法里的程序代码。在实际的运行过程中,AWT 线程首先会调用repaint()方法,然后该方法会调用update()方法,最后update()方法才会调用paint()方法,执行该方法体中的代码内容。

图13.9 方法的关系

3.Canvas 类

在Java API 中存在一个名为“画布”的类Canvas ,该类的用途非常简单,就是供程序

第13章 鼠标绘直线(绘图+事件)

·239·

员在其上作画。虽然Frame 类和Panel 类对象上也可以作画,但是Java API 中不建议使用。在具体的实现中,首先会编写一个类,该类继承了Canvas 类,接着改写paint()方法,最后再把该类对象加到Frame 或Panel 对象中。

4.坐标系统

在绘图的过程中,经常会需要坐标参数,所以必须了解计算机的坐标系统。与数学上的坐标系统类似,只是计算机坐标系统的原点(0,0)是在Component 对象的左上角。 注意:对于Frame 对象来说,不同的系统对于坐标原点的表示不一样。例如,有的系统

以整个Frame 对象的左上角作为原点,有的系统会忽略标题栏左上角作为原点。

13.3.2 各种类型对象的绘制

1.直线

在Graphics 类中存在一个drawLine()方法,主要用来实现鼠标绘直线的功能,该方法的基本格式如下:

abstract void drawLine(int x1, int y1, int x2, int y2)

参数(x1,y1)为直线的起始坐标点,参数(x2,y2)为直线的终结点坐标。下面通过一个具体的类DrawLine ,来讲解如何来鼠标绘直线,具体内容如代码13.4所示。

代码13.4 鼠标绘直线:DrawLine.java public class DrawLine extends Canvas { //继承Canvas 组件

public static void main(String argv[]) {

DrawLine d = new DrawLine(); //创建一个对象d

Frame f = new Frame("鼠标绘直线"); //创建一个窗口对象

f.add(d, BorderLayout.CENTER); //添加对象d 到窗口对象f 中

f.pack();

f.setVisible(true); //显示图形

}

public DrawLine() { //构造函数

setSize(50, 50); //设置d 对象的大小

}

public void paint(Graphics g) { //改写paint()方法

g.drawLine(10, 15, 30, 40); //鼠标绘直线

}

}

运行DrawLine.java 类,会出现如图13.10所示的用户图形界面。

【代码解析】

? DrawLine 类首先继承了Canvas 类,然后改写了paint()方

法,最后把该对象添加到窗口对象f 中。

? DrawLine 类之所以继承Canvas 类而不直接继承Frame 类,主要是因为在Windows 系统里,原点坐标会在整个Frame

对象的左上角,而不是忽略标题栏左上角。

图13.10 用户图形界面

第3篇 GUI (图形用户界面)开发

·240·

2.字符串

在Graphics 类中存在一个drawLine()方法,主要用来实现画字符的功能。该方法的基本格式如下:

abstract void drawString(String str, int x, int y)

参数str 为所要输出的字符串,而参数(x,y )为字符串最左边字符的基准线坐标。下面通过一个具体的类DrawString.java ,来讲解如何画字符,具体内容如代码13.5所示。

代码13.5 画字符:DrawString.java public class DrawString extends Canvas {

public static void main(String argv[]) {

//主函数 DrawString d = new DrawString();

//创建对象d Frame f = new Frame("画字符");

//创建对象f f.add(d, BorderLayout.CENTER);

f.pack();

//自适应大小 f.setVisible(true);

//设置可见 }

public DrawString() {

//构造函数 setSize(460, 200);

//设置大小 }

public void paint(Graphics g) {

//重写paint()方法 g.drawString("所要画的字符", 30, 50);

//输出相应文字 g.drawLine(20, 50, 180, 50);

//画直线 }

}

运行DrawString.java 类,出现如图13.11所示的用户图形界面。

【代码解析】

? DrawString 类首先继承了Canvas 类,然后改写了paint()

方法,最后把该对象添加到窗口对象f 中。

? 在具体改写paint()方法的方法体中,首先调用

drawString()画出相应的字符串,接着通过drawLine()方法画出字符串的基准线。

3.矩形 在Graphics 类中存在一些例如drawXxxRec()的方法,主要用来实现各种类型矩形的功能,如果想画实心的矩形,则需要把drawXxxRec()改成fillXxxRec()方法。这些方法的基本格式如下:

(1)abstract void drawRect(int x, int y, int width, int height)

参数(x,y )为矩形左上角的坐标,参数width 和height 分别为矩形的宽度和高度。 (2)abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

参数arcWidth 为矩形圆角的宽度,参数arcHeight 为矩形圆角的高度。

图13.11 运行结果

第13章鼠标绘直线(绘图+事件)

(3)void draw3DRect(int x, int y, int width, int height, boolean raised)

参数raised用来表示是否为凸起或凹陷的样子。

下面通过一个具体的类DrawRectangle.java,来讲解如何画矩形,具体内容如代码13.6所示。

代码13.6 画矩形:DrawRectangle.java

public class DrawRectangle extends Canvas {

public static void main(String argv[]) { //主方法

DrawRectangle d = new DrawRectangle(); //创建对象d

Frame f = new Frame("画矩形"); //创建窗体对象f

f.add(d, BorderLayout.CENTER); //添加对象d到对象f里

f.pack(); //自适应大小

f.setVisible(true); //设置窗体可见

}

public DrawRectangle() { //构造函数

setBackground(Color.blue); //设置大小

setSize(460, 170); //设置窗口大小}

public void paint(Graphics g) { //重绘方法

//创建矩形对象drawRect

g.setColor(Color.cyan); //设置颜色

g.drawString("drawRect", 15, 20); //输出相应字符串

g.drawRect(10, 30, 100, 50); //绘制矩形

//创建矩形对象drawRoundRect

g.drawString("drawRoundRect", 125, 20); //输出相应字符串

g.drawRoundRect(120, 30, 100, 50, 10, 10); //绘制矩形

//创建矩形对象draw3DRect(true)

g.drawString("draw3DRect(true)", 235, 20); //输出相应字符串

g.draw3DRect(230, 30, 100, 50, true); //绘制矩形

//创建矩形对象draw3DRect(false)

g.drawString("draw3DRect(false)", 355, 20);//输出相应字符串

g.draw3DRect(350, 30, 100, 50, false); //绘制矩形

//创建矩形对象fillRect

g.drawString("fillRect", 15, 100); //输出相应字符串

g.fillRect(10, 110, 100, 50); //绘制矩形

//创建矩形对象fillRoundRect

g.drawString("fillRoundRect", 125, 100); //输出相应字符串

g.fillRoundRect(120, 110, 100, 50, 10, 10); //绘制矩形

//创建矩形对象fillRoundRect

//创建矩形对象fill3DRect(true)

g.drawString("fill3DRect(true)", 235, 100); //输出相应字符串

g.fill3DRect(230, 110, 100, 50, true); //绘制矩形

//创建矩形对象fill3DRect(false)

g.drawString("fill3DRect(false)", 355, 100); //输出相应字符串

g.fill3DRect(350, 110, 100, 50, false); //绘制矩形

}

}

运行DrawRectangle.java类,会出现如图13.12所示的用户图形界面。

·241·

第3篇GUI(图形用户界面)开发

·242·

图13.12 运行结果

【代码解析】

?DrawString类首先继承了Canvas类,然后改写了paint()方法,最后把该对象添加到窗口对象f中。

?在具体改写paint()方法的方法体中,首先调用drawString()画出相应的字符串,接着通过drawLine()方法画出字符串的基准线。

4.椭圆

在Graphics类中存在一个名为drawOval()的方法,该方法主要用来实现画一个空心椭圆,如果想画实心椭圆,则需要调用fillOval()方法。如果想画一个圆弧,则需要调用drawArc()方法,同样,如果想画实心圆弧,则需要调用fillArc()方法。

这些方法的基本格式如下:

(1)abstract void drawOval(int x, int y, int width, int height)

参数x和y为椭圆边框左上角的坐标,而参数width和height为椭圆边框的宽度和高度。

(2)abstract void fillOval(int x, int y, int width, int height)

该方法参数的含义与drawOval()方法参数的含义一样。

(3)abstract void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) 参数x和y为圆弧边框左上角的坐标,而参数width和height为圆弧边框的宽度和高度,参数startAngle为圆弧的起点,参数arcAngle为圆弧的角度。

注意:圆弧的起点与数学上常用表达方式一样,以360°的方式表示。即0°在钟表三点钟的位置,逆时针方向旋转,90°在十二点钟的位置。

(4)fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)

该方法参数的含义与drawArc()方法参数的含义一样。

下面通过一个具体的类DrawOval.java,来讲解如何画椭圆,具体内容如代码13.7 所示。

代码13.7 画椭圆:DrawOval.java

public class DrawOval extends Canvas {

public static void main(String argv[]) { //主方法

DrawOval d = new DrawOval(); //创建类DrawOval的对象

第13章 鼠标绘直线(绘图+事件)

·243·

Frame f = new Frame("画椭圆"); //创建窗口对象

f.add(d, BorderLayout.CENTER); //添加对象d 到窗口对象上

f.pack();

f.setVisible(true); //显示窗口对象

}

public DrawOval() {

setSize(250, 150); //设置窗口对象的大小

}

public void paint(Graphics g) { //重写paint()方法

g.drawString("Circle", 20, 20); //输出相应信息

g.drawOval(10, 30, 50, 50); //绘制椭圆

g.drawString("Oval-shape", 80, 20); //输出相应信息

g.drawOval(70, 30, 100, 50); //绘制椭圆

g.drawString("drawArc", 200, 20); //输出相应信息

g.drawArc(190, 30, 50, 50, 0, 90); //绘制椭圆

g.fillOval(10, 90, 50, 50); //绘制椭圆

g.fillOval(70, 90, 100, 50); //绘制椭圆

g.fillArc(190, 90, 50, 50, 0, 90); //绘制椭圆

} }

运行DrawOval.java 类,出现如图13.13所示的用户图

形界面。

【代码解析】

? DrawString 类首先继承了Canvas 类,然后改写了

paint()方法,最后把该对象添加到窗口对象f 中。

? 在具体改写paint()方法的方法体中,首先调用

drawString()方法画出相应的字符串,接着通过

drawLine()方法画出字符串的基准线。

5.多边形

在Graphics 类中存在两个多边形的类的方法drawPolygon()和drawPolylne(),其中前者画出的多边形会把起点和终点连接起来,而后者却不会。因此方法drawPolygon()用来画多边形,而方法drawPolylne()用来画曲折线。这些方法的基本格式如下:

(1)abstract void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)

参数xpoints 为多边形所有顶点的x 坐标的值集,参数yPoints 为多边形所有顶点的y 坐标的值集,参数nPoints 为多边形顶点的个数。

(2)drawPolyline(int[] xPoints, int[] yPoints, int nPoints)

曲折线方法中参数的含义与方法drawPolylne()中参数的含义一样。

下面通过一个具体的类DrawPolygon.java ,来讲解如何画多边形,具体内容如代码13.8所示。

代码13.8 画多边形:DrawPolygon.java

public class DrawPolygon extends Canvas { 图13.13 运行结果

第3篇GUI(图形用户界面)开发

·244·int x[] = { 40, 70, 100, 100, 70, 40, 10, 10 };//所有顶点的x坐标值

int y[] = { 10, 10, 40, 70, 100, 100, 70, 40 };//所有顶点的y坐标值public static void main(String argv[]) { //主方法

Polygon d = new Polygon(); //创建Polygon类的对象Frame f = new Frame("画多边形"); //创建窗口对象

f.add(d, BorderLayout.CENTER); //添加多边形到窗口对象上

f.pack(); //自适应窗口大小

f.setVisible(true); //设置窗体的可见形状

}

public Polygon() { //构造函数setSize(110, 110); //设置大小

}

public void paint(Graphics g) { //重写paint()方法

g.drawPolygon(x, y, 8); //绘制多边形

}

}

运行DrawPolygon.java类,会出现如图13.14所示的用户图形

界面。

【代码解析】

在上述代码中,首先为画多边形准备所有顶点的x坐标值和y

坐标值,然后在paint()方法中通过代码g.drawPolygon(x, y, 8)实现画

八边形。

下面通过一个具体的类DrawPolyline.java,来讲解如何来画曲

折线,具体内容如代码13.9所示。

代码13.9 画曲折线:DrawPolyline.java

public class DrawPolygon extends Canvas {

int x[] = { 40, 70, 100, 100, 70, 40, 10, 10 };//所有顶点的x坐标值

int y[] = { 10, 10, 40, 70, 100, 100, 70, 40 };//所有顶点的y坐标值

public static void main(String argv[]) { //主方法

Polygon d = new Polygon(); //创建Polygon类的对象

Frame f = new Frame("画曲折线"); //创建窗口对象

f.add(d, BorderLayout.CENTER); //添加多边形到窗口对象上

f.pack(); //自适应窗口大小

f.setVisible(true);

}

public Polygon() { //构造函数

setSize(110, 110); //设置大小

}

public void paint(Graphics g) { //重写paint()方法

g.drawPolyline(x, y, 8); //绘制多边形

}

}

运行DrawPolyline.java类,会出现如图13.15所示用户图形界面。

【代码解析】

上述代码首先为画曲折线准备所有顶点的x坐标值和y坐标值,然后在paint()方法中通过代码g.drawPolyline(x, y, 8)实现画曲折线。

图13.14 运行结果

第13章 鼠标绘直线(绘图+事件)

·245·

图13.15 运行结果

13.4 小 结

本章主要通过Java 语言中的绘图机制实现鼠标绘直线项目,为了更好地让读者理解该项目,分别通过两种方式来实现:利用paint()方法实现重绘及利用双缓存技术来实现重绘。为了让读者能够更好地掌握Java 语言的绘制机制,在本章的最后还详细介绍了Java 语言经常遇到的各种图形的绘制。

java项目开发实例图书信息管理系统开发及源码

j a v a项目开发实例图书信息管理系统开发及源 码 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-

图书信息管理系统 一、系统功能概述: 根据图书信息管理系统的特点,可以将本系统分为2大功能模块,分别为:基础数据维护、系统数据维护。本系统各个部分及其包括的具体功能模块如下图所示: 二、数据库设计: 图书信息表: 图书类别表: 用户信息表:

读者信息表: 三、系统源代码: ewInstance(); conn = (dbUrl, dbUser, dbPwd); "数据库连接成功!"); } else return; } catch (Exception ee) { (); } } xecuteQuery(sql); } catch (SQLException e) { ();

return null; } finally { } } xecuteUpdate(sql); } catch (SQLException e) { quals("[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]DELETE 语句与 COLUMN REFERENCE 约束 'FK_TB_BORRO_REFERENCE_TB_BOOKI' 冲突。该冲突发生于数据库 'db_library',表 'tb_borrow', column 'bookISBN'。")) return -1; } finally { } } etLayout(borderLayout); setIconifiable(true); dd(panel); final JLabel label_2 = new JLabel(); ("图书编号:"); (label_2); ISBN = new JTextField("请输入13位书号",13); (new MyDocument(13)); dd(panel_1, ; final FlowLayout flowLayout = new FlowLayout();

Java Web项目开发总结

1、In Action (1)根据添加信息(insert)来考虑表中的字段,进行建表。使用PD画出ER图。要注意字段的数据类型的确定以及建表要满足三范式,减少数据冗余; (2)表建好后,根据表中各个字段来建pojo中的属性。要注意属性的数据类型和字段的数据类型要一致; (3)根据pojo中的属性确定bean的属性,直接拷贝即可,用于页面展示。在bean中,统一使用String类型变量接收前台页面传递的参数;每个HTML表单对应一个bean。HTML 表单中的字段和bean中的属性一一对应。 (4)自顶向下,依次定出action、manager、dao。先写出轮廓,跑通整个流程,再写具体实现,一点点累加,便于调试错误; (5)根据数据实体和具体业务逻辑,使用StarUML画类图,进行OOA和OOD,灵活运用设计模式。 (6)API命名: CRUD:add,get,update,delete,[list] 严格区分单复数形式,单数表示对象,复数表示对象集合。 对象、属性最好单个单词。 (7)前后台都要校验。 (8)按照资源方式组织数据接口,对前端开发帮助很大。即通过REST来实现资源的增、删、改、查。 (9)软件开发,思路最重要!代码开发多了,思路就有了。 a、一个版本一个版本递增的开发;每个版本增加一点内容; b、总结开发思路;第一步怎么做,下一步怎么做? c、用文档记录开发的思路,即第一个版本开发实现了什么功能以及开发步骤,下一个版本实现了什么功能等等?

d、程序员进行程序开发时,不要仅仅停留在代码,要深入到底层的运行机制,才可以对程序的运行机制有更准备的把握; (10)网页模板 request到template.jsp文件(此文件假设包括三个部分,即title、banner、body) web客户——> title banner———————>include:banner.jsp body————————>include:showcart.jsp (11)一步一步的定位。根据结果进行分析。 (12)分页控件 假分页: 基本思想是将所有的数据从数据库中取出,只显示有用的部分。靠的是程序的算法,实际上就是在ResultSet上进行操作。 真分页:(数据库中的一种实现) 任何数据库都会提供分页的函数操作:Oracle、MySQL(limit,即limit 开始的记录, 要查询的行数)、SQL Server(top) 基本思想是在数据库中编写特定的SQL语句。程序中只读取有用的部分,没用的部分不会加载到内存中。 (13) 2、TIPS

实验五java项目开发实例

实验五Java项目开发实例 实验目的: 掌握运用RAD开发Java应用程序 目标要求: 1.掌握运用Visual Editor创建窗口应用程序 2.掌握通过JDBC连接数据库 内容简介: 本章将介绍MyLibrary的 GUI应用程序。 实验说明: 第一节创建GUI应用程序 1.添加JDBC环境变量 在菜单栏点击“文件 -> 新建 -> 项目”,选择“Java项目”,点击“下一步”。 输入项目名称“MyLibraryGUI”,点击“下一步”。 在Java设置中选择“库”栏,点击“添加变量”。在“新建变量类路径条目”对话框

中点击“配置变量” 在“类途径变量”对话框中点击“新建”按钮,会弹出“新建变量条目”对话框。在“名称”栏中输入“CLOUDSCAPE_DRIVER_JAR”,然后点击“文件”按钮,找到D:/Program Files/IBM/Rational/SDP/runtimes/base_v6/cloudscape/lib/,如下图: 点击“确定”。再次点击“确定”。在弹出对话框点击“是”。 在“新建变量类路径条目”窗口中选择 ,点击“确定”。

这样就在MyLibraryGUI项目里添加了Cloudscape 的JDBC驱动。点击“完成”按钮。 2.新建可视类(Visual Class) 在菜单栏选择“文件 -> 新建 -> 其它 -> Java -> 可视类”,点击“下一步”。 在“Java类”窗口,“包”文本框输入,“名称”文本框输入“MyLibraryDesktopApp”,“样式”选择“Swing -> 框架”(选择后“超类”变成),点击“接口”右侧的“添加”,输入ActionListener,点击“确定”。勾选“pulibc static void main(String[] args)”,点击“完成”

JAVA编程实例大全及详解答案(50例)

JA V A编程实例大全及详解答案(50例) 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 public class lianxi01 { public static void main(String[] args) { System.out.println("第1个月的兔子对数: 1"); System.out.println("第2个月的兔子对数: 1"); int f1 = 1, f2 = 1, f, M=24; for(int i=3; i<=M; i++) { f = f2; f2 = f1 + f2; f1 = f; System.out.println("第" + i +"个月的兔子对数: "+f2); } } } 【程序2】 题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 public class lianxi02 { public static void main(String[] args) { int count = 0; for(int i=101; i<200; i+=2) { boolean b = false; for(int j=2; j<=Math.sqrt(i); j++) { if(i % j == 0) { b = false; break; } else { b = true; } } if(b == true) {count ++;System.out.println(i );} } System.out.println( "素数个数是: " + count);

javaweb开发案例

中原工学院软件学院 软件工程实践一设计任务书 指导教师签字: 年月日 超市商品管理系统

摘要 20 世纪90 年代后期特别就是近几年,我国的超市产业飞速发展,其经营模式更为复杂,旧的管理体制已经无法适应超市的发展,这就迫切的需要引进新的管理技术、超市的数据与业务越来越庞大,而计算机就就是一种高效的管理系统,这就需要我们把超市的管理与计算机结合起来,从而超市管理系统应运而生、依靠现代化的计算机信息处理技术来管理超市,节省了大量的人力、物力,并且能够快速反映出商品的进销,存等状况与各种反馈信息分析,使管理人员快速对市场的变化做出相应的决策,加快超市经营管理效率。随着人们生活水平的不断提高,对于物质的需求也越来越高,而超市作为日常生活用品聚集的场所,随着全球各种超市的数目的不断增加,规模不断增大, 其管理难度也相应的增加,而为了适应当今信息化发展的时代,一套完整的超市商品管理系统显得尤为重要。 关键词: 商品; 管理; 进销 目录 摘要 (2) 第1章项目分析 (1) 1、1背景 (1) 1、2技术分析 (1) 1、2、1 框架技术 (1) 1、2、2 Html、JSP、JavaScript动态网页技术 (1) 1、2、3 MySQL数据库 (2) 1、3工程进度计划 (2) 表1、3 工程进度计划表 (2) 第二章系统分析 (3) 2、1可行性分析 (3) 2、1、1技术可行性分析 (3) 2、1、2经济可行性分析 (3) 2、1、3安全可行性 (3) 2、1、4操作可行性 (3) 2、2需求分析 (4) 2、2、1系统的主要功能 (4)

2、2、2运行环境 (5) 第三章总体设计 (5) 3、1功能模块设计 (5) 3、2系统功能设计 (6) 3、3系统数据库E-R图 (6) 3、4数据库设计 (7) 3、4、1 职工信息表 (7) 3、4、2 用户登录表 (7) 3、4、3 商品信息表 (8) 3、4、4 供货商信息表 (8) 3、4、5 进货信息表 (8) 3、4、6 销售信息表 (9) 3、4、7 库存信息表 (9) 第四章系统实现 (9) 4、1登录界面 (9) 4、2商品信息管理模块 (10) 4、3职工信息管理模块 (10) 4、4供货商信息管理模块 (10) 4、5添加销售信息模块 (11) 4、6添加进货信息模块 (11) 4、7库存信息管理模块 (12) 4、8权限设置管理模块 (12) 第五章关键技术及实现方法 (13) 5、1主要任务 (13) 5、1、1商品管理 (13) 5、1、2销售管理 (15) 第六章结束语 (16) 附录:部分源代码 (18)

易经入门(最全解答)

易经入门(最全解答) 对于周易的迷途者,可能需要找些入门的书籍,建议。但是百度,网站等会经常变动,比如我之前找到一个周易入门的好网站,是从百度里面搜到的,过几天就搜不到了,后悔当时没有收藏网站,所以现在把之前积累的公布出来建议或书籍发布出来,大家收藏一下。 (1)这个比较全面客观的: 数目有很多,建议你你有整体的观念,这样会比较容易学。以下这段介绍,是我保存的,觉得很好,希望对你有用。 选书如选老师,因此选择书籍是一件十分重要的事。在此,向给大家推荐相关书籍,让你少走弯路,成为大师级高手! 重要叮嘱 易学、佛经是迷宫,进门后一定要学会出得了门。正如紫钦天老师在《太极博弈原理》里面“信息对抗:命越算越薄,知命与宿命”提到的,其实现在才最真实的,人要克服的是未来信息对现在的影响!很多人能懂一点点了,以为天下无敌,但是如果未来的信息,没有百分百准确,都是误导人的。最怕三分真,七分假。人依然会迷茫,犹豫,错失。 另外,易曰:知得也要知丧,当你得到了一些东西的时候,你也会失去一些东西。诚然,人生从某种意义上讲,没有绝对的好、坏、善、恶,而在于你的选择。为什么还要特别提醒呢?因在现实中接触不少易友,一学什么易或练什么功,就顾及不到其他方面,给家庭社会造成一些不好的影响。古曰:平常心是道!不要把自己标榜成与别人不一样,否则你会一事无成。要明白你只是一个凡人,不要以为自己学易了就有什么了不起。法、侣、财、地(简单讲就是方法、同道、财力、环境)是学好功法,其实也是学好易经的最好指导。千万不要指望学易来发大财,否则你将走上不归路。以此为职业的人,是有宿因的。薄迦梵歌曰:要把成与败、得于失等同看待。患得患失不是学易人应有的心态。好好工作,养家糊口,业余修习,平凡一生这是吾师给本人的开示和指导,希望易友也能从中得到启发! 最后以一句话与大家共勉:天行健,君子以自强不息;地势坤,君子以厚德载物!众善奉行,诸恶莫作最为紧要! 1、基础书 (1)周易原文注解类: 如果不读周易原文,而想彻底搞懂周易基本是不可能的,万丈高楼平地起,基础越牢,对后面的学习帮助越大。 建议采用中国易经协会会长、哲学教授刘大钧著的《周易概论》,其他如上海古籍出版社、商务印书馆等较大的出版社出版的《周易》都是比较可靠的。 南怀瑾老师倡导的儿童经典导读中心出版的原文《易经》,可以帮助大家认识和听懂一些难读的字。 (2)周易精华思想融汇类: 应该说,目前只有紫钦天老师的《太极博弈原理》一书能做到这点,全书中是没有解释卦象的。但是如果对于一个研究周易几十年的学者来说,一看这书,应该明白其实里面是是蕴含

JAVA工程师个人简历中的项目经验范文

JAVA工程师个人简历中的项目经验范文 JAVA工程师个人简历中的项目经验范文 国产中间件参考实现及平台 软件环境: j2ee 硬件环境: x86 开发工具: Java 项目描述:核高基重大专项课题该课题旨在建立国产中间件标准体系,进而在该标准体系指导下构建国产中间件参考实现与平台,从技术、产品与产业运作机制等方面探索适合国产中间件发展的一体化方案。责任描述:编写相关文档和设计报告。将Onceportal 4.0中符合JSR 286规范的Portlet容器OSGi化。 轻量级数据持久框架 软件环境: j2ee 硬件环境: x86 开发工具: Java 项目描述:国家863项目子课题该课题旨在提供一种能够提高小型信息系统持久层的开发效率,降低其在异构数据库之间的迁移成本的数据持久化框架。责任描述:调研现有持久化技术,编写可行性报告。借鉴已有产品和标准的经验,提取数据持久化通用接口,完成持久化框架总体设计。在Java环境下对框架进行开发,并提供了框架接口在关系数据库、XML数据库和目录数据库下的

实现。 基于门户系统的单点登录工具 软件环境: j2ee 硬件环境: x86 开发工具: Java JSP 项目描述:国家863项目子课题该课题旨在研究门户环境下如何安全有效的对常见的B/S和C/S应用进行单点登录集成。责任描述:调研企业B/S和 C/S应用的常见认证方式,设计门户环境下B/S和C/S应用单点登录集成工具OnceportalBSSSO1.0,OnceportalCSSSSO1.0/2.0并使用Java和JSP等相关技术将其实现。 可视化快递追踪分析平台- VisualExpress 软件环境: j2ee 硬件环境: x86 开发工具: Java 项目描述:该项目旨在开发一个可以向用户提供基于Google Map的可视化快递单件查询,提供RSS、手机短信、Email等多种单件状态信息订阅,能够利用既往数据进行单件到达时间预测,并对快递公司的整体运营情况进行简单分析的综合快递交互平台。责任描述:任务分配、项目模块划分、项目进度监督以及相关人员的协调(项目组共6人)。需求分析、模块功能的取舍裁定以及

太极化形

太极化形地理要诀 自序 且自孔子而后,斯文同骨肉,惟有地理不一家也,盖自古圣贤所创,阴阳五行,浑包天地万物,是有理而無形,理为一本,形为万殊,千变万化,甚难图也。而后世之人,遵圣道分其条目者,百家各有所师,惟有地理,無所遵者也,差错讹谬,背乎性理,此何故也?因古人草率無形,令人阅之不明,含渾無图,復行错认而不自知,故为细加搜剔,草率者详之,重复者删之,不足者补之,另行刻刊。使清纯不杂,庶地理异日可归於一家焉,况今清明二代,地理失传久矣,余作此书,遵沈公地学之形,绘其图像。明乾坤法窍之理,辩其伪真,学者以此为门路,則於隂陽理性之道,未必無小补云。 序 且地理之说,由来久矣,地理之书,亦甚繁矣,问其说,不曰天星遊年,即曰五音卦例,睹其书,非拘泥于星峰砂水,即拘泥乎黄泉会局,求其有合乎太极动静之理,五行造化之用者,百中無一,然彼非不言太极,而实不知太极之所以动静,实不知五行之所以造化。其不知所以动静造化者,縂由於不识地理之隂陽,穴星之向背,相地入乎先观穴星之向背,次察五行之形体,孰阴孰阳,不必求合乎太极,而太极动静之理,自無不含矣,以此寻龍察脉,认穴定向,如在掌握,独怪今时之師,五行莫辩隂陽不分,自诩深识地理,郎有人延卜地,虽十日半月,未能得一吉地。不曰天星不合,即曰卦例不吉,不曰峰水有石疑,即云泉局不利。如是以云卜地,未有能得真地者也,如是

为之葬人,未有不害人者也,余有感而笔於此,庶使后人不受其害,而吾師之道,得以传焉。 太极化形地理要诀 太极为地理子纲,地理要诀可知矣,夫地理不能离乎太极也,明太极者,不诚可知地理要诀哉,且古今地理不離太极,所患者人多昧耳,昧乎比則不能识太极变化之道,亦不能本太极会之会,难多言地理乎,要难卜云其吉矣。今夫太极,在天成象可观,太极在地成形可察,此中之变化無穷也。就生化之五者言之,水火木金土定也,故以五者定其形,即於色味方位预卜凶之兆,就生之四者观之,窝钳乳突是也,故以四者相其局。即於向皆运近,先知祸福之机。然则考夫地理者,可忽太极化生之機乎,而太极化形地理可考矣。 大地层次先天为体,后天为用。何为先天体?龍虎外扩,外坐山、内坐山、内外映山。何为后天为用?穴場隂陽,陽長高隂長高,隂陽皆低以中限高为行,至於结穴多不平,不识阴阳不能用,阴面如鏊背,阳面如掉平,阴属黑,阳属白,如太极之半黑半白也。 小地层次后天为体,先天为用。何为后天体?四面土色前后土左右土,於中不一,其中必有宝色。何为后天用?八方生旺,艮向丙離向庚先后皆合,必兼中有分金。至於穴場多平正,不识土色不能用,陽土有光华,隂土無气色,阴土湿,陽土干如太极之一半纯白也。纯白無黑,黑在穴后,或高或低,必有鏊背之形。半黑半白,黑在左右或平或仄,亦有阴阳之理,合於太极不亦宜乎。地理要诀在太极,而太极尚矣,夫地理千变万化,非太极無以绳之也,則要诀不在乎且以

实验五Java项目开发实例

实验五Java 项目开发实例 实验目的: 掌握运用RAD 开发Java 应用程序 目标要求: 1. 掌握运用Visual Editor 创建窗口应用程序 2. 掌握通过JDBC 连接数据库 内容简介: 本章将介绍MyLibrary 的GUI 应用程序。 实验说明: 第一节创建GUI 应用程序 1. 添加JDBC 环境变量 在菜单栏点击“文件-> 新建-> 项目”选择“ JaVa项目”点击“下一步” ” 输入项目名称“ MyLibraryGUI ”,点击“下一步” 。 在Java 设置中选择“ 库”栏,点击“ 添加变量”。在“ 新建变量类路径条目”对话框中点击“ 配置变量”

CIjaUi)SCAPE -DRlVER _JAE - D:\Frograft Fil?≡?IEM ?E? ,点击“确定 ? Sf 鎳变量荚路径条目 选择要添加至构建路径的变量世〕: 雪 ACTIVATlON _JAR - ∕dΛFrogr?m FilesXlBMXRationtl^ " CLOuDSCAPE _I)RlVZR _JAK - D:\Tr C£rsm fιl?s VlBM ?IU 已ECLL P£E_HOME - IAFr o gra m Fιl 配吃量Q 牯科 确定 取消 在“类途径变量”对话框中点击“新建”按钮,会弹出“新建变量条目”对话框。在“名 称”栏中输入“ CLOUDSCAPE_DRIVER_JAR ”,然后点击“文件”按钮,找到 D:/PrOgram FiIeS/IBM/Rational/SDP/6.0/runtimes/base_v6/cloudscape/lib/db2j.jar ,如下图: 点击“确定”。再次点击“确定”。在弹出对话框点击“是”。 在“新建变量类路径条目”窗口中选择 -叵区

实验五Java项目开发实例

实验五Java项目开发实例 令狐采学 实验目的: 掌握运用RAD开发Java应用程序 目标要求: 1.掌握运用Visual Editor创建窗口应用程序 2.掌握通过JDBC连接数据库 内容简介: 本章将介绍MyLibrary的GUI应用程序。 实验说明: 第一节创建GUI应用程序 1.添加JDBC环境变量 在菜单栏点击“文件-> 新建-> 项目”,选择“Java项目”,点击“下一步”。 输入项目名称“MyLibraryGUI”,点击“下一步”。 在Java设置中选择“库”栏,点击“添加变量”。在“新建变量类路径条目”对话框中点击“配置变量”

在“类途径变量”对话框中点击“新建”按钮,会弹出“新建变量条目”对话框。在“名称”栏中输入“CLOUDSCAPE_DRIVER_JAR”,然后点击“文件”按钮,找到D:/Program Files/IBM/Rational/SDP/6.0/runtimes/base_v6/cloudscape/lib/db2 j.jar,如下图: 点击“确定”。再次点击“确定”。在弹出对话框点击“是”。 在“新建变量类路径条目”窗口中选择 ,点击“确定”。 这样就在MyLibraryGUI项目里添加了Cloudscape 的JDBC驱动。点击“完成”按钮。 2.新建可视类(Visual Class) 在菜单栏选择“文件-> 新建-> 其它-> Java -> 可视类”,点击“下一步”。 在“Java类”窗口,“包”文本框输入mlg.library.gui,“名称”文本框输入“MyLibraryDesktopApp”,“样式”选择“Swing -> 框架”(选择后“超类”变成javax.swing.JFrame),点击“接口”右侧的“添加”,输入ActionListener,点击“确定”。勾选“puli bc static void main(String[] args)”,点击“完成” 在如下图的工作台中,点击1里的下三角箭头,将源代码区域最小化,点击2里的三角箭头使得选用板总是可见,将3处拉

薛传正:易林愚公的习易之路

薛传正:易林愚公的习易之路 今日记者有幸采访薛传正老师,经介绍得知薛传正老师现任中华周易名家协会青岛分会会长、常务理事、学术委员会委员、高级预测师、会员等职务。薛传正老师在多年的习易道路上有很多的感悟,今天让我们来聆听薛传正老师30余年来一直不间断的研习易学文化的心声。 记者问:“关于《周易》是迷信的说法,您怎么看?” 薛传正老师答道:“《周易》是中国周代的典箱,被尊为“群经之首,诸子百家之源”,西方文明有《圣经》,东方文明有《周易》。周易文化是中华文化发展的根本与源头,对中国后来历代的政治、经济、文化等诸多方面都产生巨大而又深远的影响,中国的建筑、医学、音乐、绘画、日常生活等无不与《周易》有着千丝万缕的联系,乃至影响到中国人的民族性格与民族精神。如:“天行健君子以自强不息,地势坤君子以厚德载物;”孔子读易、韦编三绝,他的千古名言“生死有命,富贵在天”就连《论语》中也多处引用《周易》的词语。”

记者问:“您是怎样与周易文化结缘的呢?” 薛传正老师答道:“我孩提时受祖父的影响,祖父酷爱中华民族的传统文化(如符咒文化),擅长中医,为当地百姓医治疑难杂症,在家乡享有盛名,我从小受祖父耳闻目睹,印上了周易的烙印,从此激起了学习周易的兴趣;记得,我六岁时,家父放在炕席下的用来护家防身的小土枪,我信手拿着玩耍,姐姐怕我出危险,拼命从我手中夺抢,我生气地把小土枪摔在墙上,土枪走火打在我屁股上,疼痛难忍,血流不止,我祖父运用周易符咒即止血咒给我止住血,顿时疼痛消失,从那以后我对周易文化产生了浓厚的兴趣;在八四年偶遇一周易高人,老人家说:“你在31--35岁几年,会出现经济拮据及官非”,结果在1989年生育二胎,夫人因孩子小而辞去了工作,只靠我自己的收入维持四口人的家庭,生活相当拮据。从那以后更深深爱上了易经,一发不可收拾;自此开始先后研读了命理类书:邵伟华老师的《四柱预测学》李后启老师的《秀枝命理》、《算命100法》、刘文元老师的《四柱正源》以及《三命通会》、《穷通宝鉴》、《滴天髓》、《神峰通考》;风水类:《阴宅三要》、《阳宅爱众》、《堪舆大全》、《阳宅十书》、《八宅明镜》、《阴阳宅大全》、《入地神眼》、《地理五诀》、《雪心赋》、《沈氏玄空学》、《地理啖蔗录》、《金锁玉关》、《地理辨证疏》、《宅经》、秦伦诗老师的《风水》,韩少清的《玄空风水精论》,钟义明的《玄空操作实务》、朱镇强的《择吉安居》;八卦类:邵伟华老师的《周易预测学》、《筮府珠林》;奇门类:张志春老师的《神奇之门》、《开悟之门》,杜新会老师的《奇门遁甲现代实例精解》,石建国老师的《奇门遁甲解真》,刘文元老师的《奇门启悟》,李万福老师的《奇门与四柱》,刘广斌老师的 《奇门预测学》以及《奇门遁甲统综》、《金函玉匣奇门遁甲》、《奇门归旨》;择

Java项目开发实例图书信息管理系统开发及源码

图书信息管理系统 一、系统功能概述: 根据图书信息管理系统的特点,可以将本系统分为2大功能模块,分别为:基础数据维护、系统数据维护。本系统各个部分及其包括的具体功能模块如下图所示: 二、数据库设计: 图书信息表: 字段名说明类型长度及备注 ISBN国际标准书号Varchar(13)主键 typeId图书类型id Int Bookname书名Varchar(40) Writer作者Varchar(21) Translater译者Varchar(30)可以为空 Publisher出版社Varchar(50) Date出版日期Smalldatetime Price价格money 图书类别表: 字段名说明类型长度及备注TypeName图书类型Varchar(20)

用户信息表: 三、系统源代码: Com.zhang.dao:Dao.java //数据库的连接与操作类package com.zhang.dao; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;

import com.zhang.model.BookInfo; import com.zhang.model.BookType; import com.zhang.model.Operator; import com.zhang.model.Reader; import https://www.doczj.com/doc/756385266.html,er; public class Dao { protected static String dbClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; protected static String dbUrl = "jdbc:sqlserver://localhost:1433;" + "DatabaseName=db_lib;SelectMethod=Cursor"; protected static String dbUser = "sa"; protected static String dbPwd = "zhangyong"; protected static String second = null; private static Connection conn = null; //创建数据库连接 private Dao() { try { if (conn == null) { Class.forName(dbClassName).newInstance(); conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd); System.out.println("数据库连接成功!"); } else return; } catch (Exception ee) { ee.printStackTrace(); } } //执行查询 private static ResultSet executeQuery(String sql) { try { if(conn==null) new Dao(); return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE).ex ecuteQuery(sql); } catch (SQLException e) { e.printStackTrace(); return null; } finally { } }

JAVA项目开发实例全教程

光盘内容框架 本书附带光盘内容包括本书源程序、全程视频教学程序、《编程词典》体验版,完整光盘内容框架如图1.1所示。 图1.1 光盘内容框架图 如何使用本书源程序 1、开发及运行环境 本书源程序都是在Windows Server 2003下开发的,程序测试环境为Windows Server 2003。用户只有在Windows Server 2003下正确配置程序所需的运行环境后,才可以使用本书中的源程序。软件开发平台如下: 操作系统:Windows Server 2003; 数据库:SQL Server 2000、SQL Server 2005、MySQL5.0、Oracle10g、JavaDB; 开发环境:Eclipse、MyEclipse、EclipseMe、JDK6、J2ME2.5.2、框架(Spring、Struts、Hibernate)、Tomcat5.5; 分辨率:最佳效果1024×768;

2、源程序用户名和密码 本书程序用户名和密码统一为: 用户名:tsoft 密码:111 3、源程序使用方法 (1)使用本书中源程序时,请将源程序文件夹下的所有文件拷贝到计算机硬盘上,并去掉所有文件的只读属性。 (2)安装Eclipse。 (3)安装数据库系统。其中第01章、第05章、第07章、第08章使用的是SQL Server 2000数据库,第03章使用的是Oracle数据库,第04章使用的是SQL Server 2005数据库,第09章使用的是MySQL数据库,第02章和第06章在运行程序时自动创建数据库,而第10章没有用到数据库。 (4)数据库文件存储于源程序下Database文件夹中。使用SQL Server 2000和SQL Server 2005需要附加数据库,附加方法可参见源程序所在目录下的readme.doc文档。 注意:为了方便读者学习和使用本书中的源程序,特在所有源程序路径下放置了“readme.doc”文档,该文档中提供了数据库的附加方法、配置以及程序详细使用说明。 本光盘根目录下的“源程序使用录像”,以录像的形式帮助读者安装相应的软件和配置对应的数据库。 如何使用《全程视频教学程序》 全程视频教学程序.exe 为本光盘中所有项目全程视频教学程序,通过它可以实现如下功能。 快速调用本书提供的全程视频教学录像 快速调用本书赠送的《编程词典》体验版 浏览整个光盘 查看帮助信息 下面介绍“全程视频教学程序”的使用方法。 (1)将光盘放入光驱,程序会自动运行,如果不能自动运行,请右键单击光盘图标,在弹出的菜单中选择“自动播放”。 (2)打开全程视频教学程序的主界面,如图1.2所示,单击相应按钮,即可执行相应的功能,例如单击“多媒体教学录像”,则打开各章项目录像列表,如图1.3所示。

《java程序设计》编程实例

1.从键盘输入6个整数并将其放入一个数组中,计算数组中所有元素的和并输出。import java.util.Scanner; class a1 { public static void main(String[] args) { int []a=new int [6]; int sum=0; Scanner in=new Scanner(System.in); for(int i=0;i<6;i++){ a[i]=in.nextInt(); sum+=a[i]; } System.out.println("结果是"+sum); }} 2编写Book.java,定义一个Book类,具有以下的属性和方法: 成员变量:书名(title),作者(writer),字数(wordNumber) 成员方法:计算单价 price()单价=字数/1000 *35 某一个成员变量的Set 和get方法 构造方法有参和无参。在main函数中生成一个Book类的对象,书名为java 程序设计,作者为张三字数为10000,并计算其单价并输出。 class Book{ String title; String writer; int wordNumber; Book(){ title="数据库"; writer="李四"; wordNumber=2000; } Book(String title,String writer,int wordNumber){ this.title=title; this.writer=writer; this.wordNumber=wordNumber; } int price(){ int price=(wordNumber/1000)*35; return price; } void setTitle(String title){ this.title=title; } String getTitle(){ return title; }} class ww{ public static void main(String args[]){ Book xiao=new Book("java程序设计","张三",10000); int price=xiao.price(); System.out.println("单价为:"+price);}} 3编写代码,创建标题为“学生管理系统登陆界面”的窗口,并在窗口中添加一个长度为20的文本框、一个显示文字“学生信息管理”的标签和一个按钮,单

java编程经典案例与模板

(1)列出目录下的文件 import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; //列出目录下的文件 public class ListFileDemo extends JFrame{ JTextField jtfPath; //路径输入文本域 JTextArea jtfShow; //显示目录下的内容 public ListFileDemo(){ super("列出目录下的文件"); Container container=getContentPane(); //得到容器 jtfPath=new JTextField(16); //实例化路径输入文本框 JButton jbGo=new JButton("转到"); //实例化"转到"按钮 jtfShow=new JTextArea(); //实例化显示内容文本框 jtfPath.addActionListener(new ShowDirListener()); //增加事件处理 jbGo.addActionListener(new ShowDirListener());

JPanel panel=new JPanel(); //实例化面板,用于增加路径输入和按钮 panel.add(jtfPath); panel.add(jbGo); container.add(panel,BorderLayout.NORTH); //增加组件到容器 JScrollPane jsp=new JScrollPane(jtfShow); jsp.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); //设置边界 container.add(jsp,BorderLayout.CENTER); setSize(300,200); //设置窗口尺寸 setVisible(true); //设置窗口可视 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序 } class ShowDirListener implements ActionListener { //取得目录内容的事件处理 public void actionPerformed(ActionEvent event) { showDirContent(jtfPath.getText()); //调用显示目录内容方法}

一个Java Web项目的逆向工程应用案例

一个Java Web项目的逆向工程应用案例 摘要对于绝大多数企业来说,现有的许多系统要想彻底更换或者对其做大的调整,在经济能力上是不可想象的。因此,通常采用再工程的方法以延长其寿命,逆向工程为形式之一。本文就以Java Web网站项目中“用户登录模块”为例剖析逆向工程。 关键词逆向工程;用户登录模块;UML 1 概述 逆向工程是以复原软件的描述和设计为目标的软件分析过程。程序本身经过逆向工程过程并无变化。软件源程序代码总是能得到的,用它作为逆向工程过程的输入推倒出设计,并且文档化,逆向软件工程的目的是使软件得以维护。 2 一个逆向工程应用的案例 以Java Web网站项目中“用户登录模块”为例剖析逆向工程,运行效果如图1所示,包结构图如图2所示: 其中,登录页面login.jsp、欢迎页面main.jsp、转向控制类LoginServlet.java、对应数据库中用户信息表的通用数据模型的实体类User.java、完成用户信息的数据访问类LoginDAO.java、数据库公共连接类DBConnection.java、阻止非法IP 访问的过滤器类IPFilter.java、进行编码转换的过滤器类EncodingFilter.java、版权控制的过滤器类CopyrightFilter.java、阻止未登录用户访问主页的过滤器类LoginFilter.java、此外配置文件web.xml负责相关配置工作。 1)MVC的设计模式。 在进行逆向工程之前,首先需明白MVC设计模式的基本概念,即Model View Controller,把一个应用的输入、处理、输出流程按照Model、View、Controller 的方式进行分离,这样一个应用被分为三层:模型层、视图层、控制层,如图3所示。 2)基于MVC模式及包图结构图,构建出“用户登录模块”的组件图及部署图(如图4及图5所示)。 3)观察运行效果,利用软件建模方法分析“用户登录模块”,重构用例模型。 使用如图6所示的用例图来描述其关系。另外使用UML进行系统建模,并非只是意味着画出UML用例图,用例文档说明是同样重要的,这里不一一详述了,同时根据用例文档画出其活动图如图7所示。

java开发项目需求详细及流程图

点菜系统 外部实体: 1>顾客 2>服务员 3>厨师 4>收银员 5>系统管理员 系统功能: 顾客上座后可以发出“查询菜谱信息请求”,“查询菜谱信息请求”可以查询“菜谱信息文件”中的“菜谱信息”,“菜谱信息”包括菜的编号、菜的名字、菜肴类别、菜的价格。 2> 顾客浏览“菜谱信息”后,可以点"选择、取消"键可方便顾客对点菜的取舍和修改。最后点"提交"键,确定点的菜。“确定点菜信息”包括桌号、已点菜单、已上菜单、未上菜单、时间、服务员编号一同发送给系统同时存入“点菜信息文件”,再自动向厨师发出“更新点菜信息”。 3> 顾客可要向系统发出“调整点菜信息请求”,此请求包括催菜,缓菜,加菜,退菜,然后系统自动作出调整并更新“点菜信息文件”,再自动向厨师发出“更新点菜信息”。 结帐:顾客向系统发出“结帐请求”,系统结算消费金额,生成“消费清单“,并存入“消费清单文件“,再反馈给顾客,收银员,服务员。消费清单包括桌号,时间,已点菜单,金额。 服务员收到“消费清单”后,到顾客处结账,把结账金额交到收银员处。收银员收账后,核对金额后向系统发出“确定金额信息”。系统收到“确定金额信息”后自动将“消费清单”存入“账目文件”中。 4> 厨师根据顾客“点菜信息”开始做菜。 厨师做完每道菜后,向系统发出“完成通知”,系统更新“点菜信息文件“后,再自动向厨师发出“更新点菜信息”。系统向服务员发出“送菜信息”。服务员收到“送菜信息”后到厨房取菜,給顾客送上。“送菜信息”包括菜的名字,桌号。 5>

系统管理员可以登录系统,系统将验证登陆请求。如果是非法登陆将发出“非法登陆信息”。 登陆系统后可以向系统发出“查询请求”,“查询请求”包括查询“菜谱信息”和“账目信息”。还可以执行“修改菜谱信息”,“修改菜谱信息”包括增加、修改、删除菜谱信息。 点菜系统顶层DFD图 点菜系统中层DFD图 点菜系统底层DFD图 P3加工分解 P1加工分解 P2加工分解

java项目开发实例图书信息管理系统开发文档及源码

java项目开发实例图书信息管理系统开发文档及源码一、系统功能概述: 依照图书信息治理系统的特点,能够将本系统分为2大功能模块,分别为:基础数据爱护、系统数据爱护。本系统各个部分及其包括的具体功能模块如下图所示: 二、数据库设计: 图书信息表: 字段名说明类型长度及备注 ISBN 国际标准书号Varchar(13) 主键 typeId 图书类型id Int Bookname 书名Varchar(40) Writer 作者Varchar(21) Translater 译者Varchar(30) 能够为空Publisher 出版社Varchar(50) Date 出版日期Smalldatetime Price 价格money 图书类别表:

读者信息表: 三、系统源代码: Com.zhang.dao:Dao.java //数据库的连接与操作类package com.zhang.dao; import java.sql.Connection; import java.sql.Date; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList;

import java.util.List; import com.zhang.model.BookInfo; import com.zhang.model.BookType; import com.zhang.model.Operator; import com.zhang.model.Reader; import https://www.doczj.com/doc/756385266.html,er; public class Dao { protected static String dbClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; protected static String dbUrl = "jdbc:sqlserver://localhost:1433;" + "DatabaseName=db_lib;SelectMethod=Cursor"; protected static String dbUser = "sa"; protected static String dbPwd = "zhangyong"; protected static String second = null; private static Connection conn = null; //创建数据库连接 private Dao() { try { if (conn == null) { Class.forName(dbClassName).newInstance(); conn= DriverManager.getConnection(dbUrl, dbUser, dbPwd); System.out.println("数据库连接成功!"); } else return; } catch (Exception ee) { ee.printStackTrace(); } } //执行查询 private static ResultSet executeQuery(String sql) { try { if(conn==null) new Dao(); return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR _UPDATABLE).executeQuery(sql); } catch (SQLException e) { e.printStackTrace(); return null; } finally {

相关主题
文本预览
相关文档 最新文档