| 導購 | 订阅 | 在线投稿
分享
 
 
 

用JAVA設計面向對象的打印程序

來源:互聯網網民  2008-05-31 12:10:21  評論

用Java設計面向對象的打印程序

張來東 (zhangld@mail.hf.ah.cn)

打印程序的編寫通常采用結構化的編程的方法,按特定的位置和一定順序將打印內容送往打印機。在采用JAVA設計打印程序時仍然可采用結構化的方法,但是編寫較爲麻煩且代碼不能重用,不是一種好的方法,給人一種"新瓶老酒"的感覺。目前爲數不少的JAVA書籍在介紹打印時,側重介紹打印功能的實現,而打印用例的主要代碼卻是結構化的。java網站在介紹java打印功能時,實現打印的代碼也是結構化的。

假如將打印內容進行對象化分析,設計出面向對象的打印程序,則會更出色地完成打印要求,並且代碼很輕易重用,事半功倍。(本文假定你已經了解java的打印功能)

一、打印對象的分析

打印通常包含以下基本內容:文字、線條、線框、圖像等。比如一個表格是由若幹文字、線條和線框對象其組成。爲敘述簡單,本文僅涉及以下三種對象。

文字對象的屬性:文字內容,坐標,顔色,字體,對齊方式。

線條對象的屬性:起點坐標,終點坐標,顔色,線寬。

線框對象的屬性:左上角坐標,寬度,高度,線寬,顔色。

這些打印對象必須能根據屬性將自己繪制出來。從另一個層面,可將打印的一頁內容,理解爲這些打印對象的容器。設計打印程序,只需將打印內容分解成適當的對象,由這些打印對象的集合來完成打印的要求。例如:打印普通表格。只需將表格分解成若開線框對象,線條對象,和文字對象。

二、打印對象的設計

設計思路:根據打印對象的分析,可以將打印的內容看成這些打印對象的集合。實際的打印就是將打印對象集合中的打印對象遍曆,調用其print方法,因此這幾類打印對象就需要封裝相同的打印接口。

1、對象打印接口設計如下:

package lilidb;

import java.awt.Graphics;

/**

*打印對象接口;

*一、文字對象。二、線條對象。三、線框對象。每

*種對象各有其屬性,但都必須有print方法。

*/

public interface PrintObject{

/**

*打印或預覽實際內容

*@param g 打印或預覽的圖形對象,根據是預覽還是打印傳入具體的Graphics對象

*/

public void print(Graphics g);

}

2、 文字打印對象的設計

爲了敘述的簡單,文中的打印對象,未加居中等處理。

package lilidb;

import java.awt.*;

import java.util.*;

/**

*打印文字對象

**/

public class PrintLabel implements PrintObject{

String label;

int px;

int py;

Color color = Color.black;

FontMetrics fm;

/**

*構造PrintLabel 對象,

*@param ls 標簽內容。

*@param x 標簽的X坐標

*@param y 標簽的Y坐標

*/

public PrintLabel(String ls,int x,int y){

label = ls;

px = x;

py = y;

range = 1;

}

/**

* 設置顔色

* @para colr 顔色值

*/

public void setRange(Color colr){

color = colr;

}

/**

*設置標簽字體

*@param fontn 字體名稱

*@param type 字體類型 可選值爲 Font.BOLD,Font.ITALIC,Font.PLAIN

*@param size 字體象素尺寸

*/

public void setFont(String fontn,int type,int size){

font = new Font(fontn,type,size);

}

/**

*設置標簽位置

*@param x x坐標

*@param y y坐標

*/

public void setLabelPosition(int x,int y){

px = x;

py = y;

}

/**

*設置標簽內容

*@param ls 標簽內容

*/

public void setLabelString(String ls){

label = ls;

}

/**

*打印或預覽實際內容

*@param g 打印或預覽的圖形對象

*/

public void print(Graphics gg){

Graphics2D g = (Graphics2D)gg;

g.setFont(font);

g.drawString(label, px, py)

}

}

}

3、 線條打印對象的設計

package lilidb;

import java.awt.*;

import java.util.*;

import java.awt.Graphics2D;

import java.awt.Graphics;

/**

*線打印對象

*主要打印線條,其打印位置、和線形可以設置

*/

public class PrintLine implements PrintObject{

/**

*線的起點

*/

int startX;

int startY;

/**

*線的終點

*/

int endX;

int endY;

/**

*線長

*/

int lineLong;

/**

*線寬

*/

float lineWidth;

BasicStroke bs;

/**

*構造線對象,確定位置

*@param sx 線起點X坐標

*@param sy 線起點Y坐標

*@param ex 線終點X坐標

*@param ey 線終點Y坐標

*/

public PrintLine(int sx,int sy,int ex,int ey){

startX = sx;

startY = sy;

endX = ex;

endY = ey;

}

/**

*設置線寬

*@param w 線的寬度

*/

public void setWidth(float w){

lineWidth = w;

bs = new BasicStroke(lineWidth);

}

/**

*@see PrintObject#print

*/

public void print(Graphics g){

Graphics2D g2d = (Graphics2D)g;

g2d.setStroke(bs);

g2d.drawLine(startX, startY, endX, endY);

}

}

4、線框打印對象的設計

package lilidb;

import java.awt.*;

import java.awt.print.*;

import java.util.*;

/**

*打印矩形對象,矩形對象一般用來組成表格,

*/

public class PrintRectangle implements PrintObject{

float lineWidth;

BasicStroke bs;

/**

*3D矩形

*/

public final static int REC3D = 0;

/**

*普通矩形

*/

public final static int RECNORMAL = 1;

/**

*圓角矩形

*/

public final static int RECROUND = 2;

int px;

int py;

int w;

int h;

/**

* x 方向圓倒角直徑

*/

int ax;

/**

* y 方向圓倒角直徑

*/

int ay;

int type;

boolean raised;

/**

*設置線寬

*@param w 線的寬度

*/

public void setWidth(float w){

lineWidth = w;

bs = new BasicStroke(lineWidth);

}

/**

*構造矩形打印對象

*@param x 矩形左上角 X 坐標

*@param y 矩形左上角 y 坐標

*@param width 矩形寬

*@param height 矩形高

*/

public PrintRectangle(int x,int y,int width ,int height){

px = x;

py = y;

w = width;

h = height;

}

/**

*設置矩形類型

*@param t 矩形類型

*/

public void setType(int t){

type = t;

}

/**

*設置3D矩形類型

*@param r 是否升起

*/

public void set3DType(boolean r){

raised =r;

}

/**

*設置圓角矩形的圓角

*@param xd x方向圓角直徑

*@param yd y方向圓角直徑

*/

public void setRound(int xd,int yd){

ax = xd;

ay = yd;

}

/**

*@see PrintObject#print

*/

public void print(Graphics gg){

Graphics2D g = (Graphics2D)gg;

g.setStroke(bs);

switch (type){

case REC3D:{

g.draw3DRect(px, py, w, h, raised);

break;

}

case RECNORMAL:{

g.drawRect(px, py, w, h);

break;

}

case RECROUND:{

g.drawRoundRect(px, py, w, h, ax, ay);

break;

}

}

}

}

5、 打印內容的基類的設計

基類必須具有要有一個打印對象的容器,程序中使用了Vector對象。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
用Java設計面向對象的打印程序 張來東 (zhangld@mail.hf.ah.cn) 打印程序的編寫通常采用結構化的編程的方法,按特定的位置和一定順序將打印內容送往打印機。在采用JAVA設計打印程序時仍然可采用結構化的方法,但是編寫較爲麻煩且代碼不能重用,不是一種好的方法,給人一種"新瓶老酒"的感覺。目前爲數不少的JAVA書籍在介紹打印時,側重介紹打印功能的實現,而打印用例的主要代碼卻是結構化的。java網站在介紹java打印功能時,實現打印的代碼也是結構化的。 假如將打印內容進行對象化分析,設計出面向對象的打印程序,則會更出色地完成打印要求,並且代碼很輕易重用,事半功倍。(本文假定你已經了解java的打印功能) 一、打印對象的分析 打印通常包含以下基本內容:文字、線條、線框、圖像等。比如一個表格是由若幹文字、線條和線框對象其組成。爲敘述簡單,本文僅涉及以下三種對象。 文字對象的屬性:文字內容,坐標,顔色,字體,對齊方式。 線條對象的屬性:起點坐標,終點坐標,顔色,線寬。 線框對象的屬性:左上角坐標,寬度,高度,線寬,顔色。 這些打印對象必須能根據屬性將自己繪制出來。從另一個層面,可將打印的一頁內容,理解爲這些打印對象的容器。設計打印程序,只需將打印內容分解成適當的對象,由這些打印對象的集合來完成打印的要求。例如:打印普通表格。只需將表格分解成若開線框對象,線條對象,和文字對象。 二、打印對象的設計 設計思路:根據打印對象的分析,可以將打印的內容看成這些打印對象的集合。實際的打印就是將打印對象集合中的打印對象遍曆,調用其print方法,因此這幾類打印對象就需要封裝相同的打印接口。 1、對象打印接口設計如下: package lilidb; import java.awt.Graphics; /** *打印對象接口; *一、文字對象。二、線條對象。三、線框對象。每 *種對象各有其屬性,但都必須有print方法。 */ public interface PrintObject{ /** *打印或預覽實際內容 *@param g 打印或預覽的圖形對象,根據是預覽還是打印傳入具體的Graphics對象 */ public void print(Graphics g); } 2、 文字打印對象的設計 爲了敘述的簡單,文中的打印對象,未加居中等處理。 package lilidb; import java.awt.*; import java.util.*; /** *打印文字對象 **/ public class PrintLabel implements PrintObject{ String label; int px; int py; Color color = Color.black; FontMetrics fm; /** *構造PrintLabel 對象, *@param ls 標簽內容。 *@param x 標簽的X坐標 *@param y 標簽的Y坐標 */ public PrintLabel(String ls,int x,int y){ label = ls; px = x; py = y; range = 1; } /** * 設置顔色 * @para colr 顔色值 */ public void setRange(Color colr){ color = colr; } /** *設置標簽字體 *@param fontn 字體名稱 *@param type 字體類型 可選值爲 Font.BOLD,Font.ITALIC,Font.PLAIN *@param size 字體象素尺寸 */ public void setFont(String fontn,int type,int size){ font = new Font(fontn,type,size); } /** *設置標簽位置 *@param x x坐標 *@param y y坐標 */ public void setLabelPosition(int x,int y){ px = x; py = y; } /** *設置標簽內容 *@param ls 標簽內容 */ public void setLabelString(String ls){ label = ls; } /** *打印或預覽實際內容 *@param g 打印或預覽的圖形對象 */ public void print(Graphics gg){ Graphics2D g = (Graphics2D)gg; g.setFont(font); g.drawString(label, px, py) } } } 3、 線條打印對象的設計 package lilidb; import java.awt.*; import java.util.*; import java.awt.Graphics2D; import java.awt.Graphics; /** *線打印對象 *主要打印線條,其打印位置、和線形可以設置 */ public class PrintLine implements PrintObject{ /** *線的起點 */ int startX; int startY; /** *線的終點 */ int endX; int endY; /** *線長 */ int lineLong; /** *線寬 */ float lineWidth; BasicStroke bs; /** *構造線對象,確定位置 *@param sx 線起點X坐標 *@param sy 線起點Y坐標 *@param ex 線終點X坐標 *@param ey 線終點Y坐標 */ public PrintLine(int sx,int sy,int ex,int ey){ startX = sx; startY = sy; endX = ex; endY = ey; } /** *設置線寬 *@param w 線的寬度 */ public void setWidth(float w){ lineWidth = w; bs = new BasicStroke(lineWidth); } /** *@see PrintObject#print */ public void print(Graphics g){ Graphics2D g2d = (Graphics2D)g; g2d.setStroke(bs); g2d.drawLine(startX, startY, endX, endY); } } 4、線框打印對象的設計 package lilidb; import java.awt.*; import java.awt.print.*; import java.util.*; /** *打印矩形對象,矩形對象一般用來組成表格, */ public class PrintRectangle implements PrintObject{ float lineWidth; BasicStroke bs; /** *3D矩形 */ public final static int REC3D = 0; /** *普通矩形 */ public final static int RECNORMAL = 1; /** *圓角矩形 */ public final static int RECROUND = 2; int px; int py; int w; int h; /** * x 方向圓倒角直徑 */ int ax; /** * y 方向圓倒角直徑 */ int ay; int type; boolean raised; /** *設置線寬 *@param w 線的寬度 */ public void setWidth(float w){ lineWidth = w; bs = new BasicStroke(lineWidth); } /** *構造矩形打印對象 *@param x 矩形左上角 X 坐標 *@param y 矩形左上角 y 坐標 *@param width 矩形寬 *@param height 矩形高 */ public PrintRectangle(int x,int y,int width ,int height){ px = x; py = y; w = width; h = height; } /** *設置矩形類型 *@param t 矩形類型 */ public void setType(int t){ type = t; } /** *設置3D矩形類型 *@param r 是否升起 */ public void set3DType(boolean r){ raised =r; } /** *設置圓角矩形的圓角 *@param xd x方向圓角直徑 *@param yd y方向圓角直徑 */ public void setRound(int xd,int yd){ ax = xd; ay = yd; } /** *@see PrintObject#print */ public void print(Graphics gg){ Graphics2D g = (Graphics2D)gg; g.setStroke(bs); switch (type){ case REC3D:{ g.draw3DRect(px, py, w, h, raised); break; } case RECNORMAL:{ g.drawRect(px, py, w, h); break; } case RECROUND:{ g.drawRoundRect(px, py, w, h, ax, ay); break; } } } } 5、 打印內容的基類的設計 基類必須具有要有一個打印對象的容器,程序中使用了Vector對象。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有