国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 11:01:44
字體:
來源:轉載
供稿:網友

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對象。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉定区| 随州市| 巫山县| 玛曲县| 阳原县| 恩平市| 奉化市| 武城县| 来凤县| 遂川县| 集贤县| 乌鲁木齐市| 石嘴山市| 西畴县| 揭阳市| 益阳市| 山东省| 泉州市| 容城县| 宁陵县| 五家渠市| 岳阳县| 关岭| 巢湖市| 治县。| 山东省| 盘锦市| 乾安县| 天镇县| 彝良县| 苍梧县| 阜城县| 白玉县| 衡东县| 镇原县| 阜宁县| 宜阳县| 十堰市| 万宁市| 云浮市| 天台县|