Java打印程序设计

Java打印程序设计
Java打印程序设计

Java打印程序设计

1 前言

在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Java提供的打印功能一直都比较弱。实际上最初的jdk根本不支持打印,直到jdk1.1才引入了很轻量的打印支持。所以,在以前用Java/Applet/JSP/Servlet设计的程序中,较复杂的打印都是通过调用ActiveX/OCX控件或者VB/VC程序来实现的,非常麻烦。实际上,SUN公司也一直致力于Java打印功能的完善,而Java2平台则终于有了一个健壮的打印模式的开端,该打印模式与Java2D图形包充分结合成一体。更令人鼓舞的是,新发布的jdk1.4则提供了一套完整的"Java 打印服务 API" (Java Print Service API),它对已有的打印功能是积极的补充。利用它,我们可以实现大部分实际应用需求,包括打印文字、图形、文件及打印预览等等。本文将通过一个具体的程序实例来说明如何设计Java打印程序以实现这些功能,并对不同版本的实现方法进行分析比较,希望大家能从中获取一些有益的提示。

2 Java中的打印

2.1 Java的打印API

Java的打印API主要存在于java.awt.print包中。而jdk1.4新增的类则主要存在于javax.print 包及其相应的子包javax.print.event和javax.print.attribute中。其中javax.print包中主要包含打印服务的相关类,而javax.print.event则包含打印事件的相关定义,javax.print.attribute则包括打印服务的可用属性列表等。

2.2 如何实现打印

要产生一个打印,至少需要考虑两条:

需要一个打印服务对象。这可通过三种方式实现:在jdk1.4之前的版本,必须要实现java.awt.print.Printable接口或通过Toolkit.getDefaultToolkit().getPrintJob来获取打印服务对象;在jdk1.4中则可以通过javax.print.PrintSerivceLookup来查找定位一个打印服务对象。

需要开始一个打印工作。这也有几种实现方法:在jdk1.4之前可以通过java.awt.print.PrintJob(jdk1.1提供的,现在已经很少用了)调用print或printAll方法开始打印工作;也可以通过java.awt.print.PrinterJob的printDialog显示打印对话框,然后通过print方法开始打印;在jdk1.4中则可以通过javax.print.ServiceUI的printDialog显示打印对话框,然后调用print方法开始一个打印工作。

2.3 打印机对话框

2.3.1 Printable的打印对话框

开始打印工作之前,可以通过PrinterJob.printDialog来显示一个打印对话框。它给用户一个机会以选择应该打印的页码范围,并可供用户改变打印设置。它是一个本地对话框。

事实上,当从一个Printable对象进行一个打印工作时,打印对象并不知道需要打印多少页。它只是不停地调用print方法。只要print方法返回Printable.PAGE_EXISTS值,打印工作就不停地产生打印页,直到print方法返回Printable.NO_SUCH_PAGE时,打印工作才停止。

由于打印工作只有在打印完成后才进行准确的页数计算,所以在对话框上的页码范围是尚未初始化的[1,9999]。我们可以通过构建一个java.awt.print.Book对象传递给打印对象;也可以通过指定的格式计算需要打印的页数并传递给打印对象,使其准确地知道要打印多少页。

2.3.2 ServiceUI的打印对话框

与Printable的对话框不同的是,在jdk1.4提供ServiceUI的打印机对话框的缺省行为已经用新的 API 更改了:缺省情况下对话框不显示。我们必须使用ServiceUI类调用printDialog方法创建如下所示的打印对话框。

3 Java打印程序设计实例

3.1 打印文本

3.1.1 应用场景

假设我们需要打印一个窗体的某个文本编辑域(可能只有几行,也可能包含多页)的内容,并且每页最多打印54行,如何实现呢?

3.1.2 解决方法

基本思路如下:首先我们需要实现Printable接口,然后按照每页最多54行的格式计算共需要打印多少页,当打印文本的按钮被点击时,执行相应的打印动作。打印文本的具体操作可通过Graphics2D的drawString方法来实现。

1、实现Printable接口

/*Graphic指明打印的图形环境;PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英寸的1/72,1英寸为25.4毫米。A4纸大致为595×842点);page指明页号*/

public int print(Graphics g, PageFormat pf, int page) throws PrinterException {

Graphics2D g2 = (Graphics2D)g;

g2.setPaint(Color.black); //设置打印颜色为黑色

if (page >= PAGES) //当打印页号大于需要打印的总页数时,打印工作结束

return Printable.NO_SUCH_PAGE;

g2.translate(pf.getImageableX(), pf.getImageableY());//转换坐标,确定打印边界

drawCurrentPageText(g2, pf, page); //打印当前页文本

return Printable.PAGE_EXISTS; //存在打印页时,继续打印工作

}

/*打印指定页号的具体文本内容*/

private void drawCurrentPageText(Graphics2D g2, PageFormat pf, int page) { String s = getDrawText(printStr)[page]; //获取当前页的待打印文本内容

//获取默认字体及相应的尺寸

FontRenderContext context = g2.getFontRenderContext();

Font f = area.getFont();

String drawText;

float ascent = 16; //给定字符点阵

int k, i = f.getSize(), lines = 0;

while(s.length() > 0 && lines < 54) //每页限定在54行以内

{

k = s.indexOf('\n'); //获取每一个回车符的位置

if (k != -1) //存在回车符

{

lines += 1; //计算行数

drawText = s.substring(0, k); //获取每一行文本

g2.drawString(drawText, 0, ascent); //具体打印每一行文本,同时走纸移位 if (s.substring(k + 1).length() > 0) {

s = s.substring(k + 1); //截取尚未打印的文本

ascent += i;

}

}

else //不存在回车符

{

lines += 1; //计算行数

drawText = s; //获取每一行文本

g2.drawString(drawText, 0, ascent); //具体打印每一行文本,同时走纸移位 s = ""; //文本已结束

}

}

}

/*将打印目标文本按页存放为字符串数组*/

public String[] getDrawText(String s) {

String[] drawText = new String[PAGES]; //根据页数初始化数组

for (int i = 0; i < PAGES; i++)

drawText[i] = ""; //数组元素初始化为空字符串

int k, suffix = 0, lines = 0;

while (s.length() > 0) {

if (lines < 54) //不够一页时

{

k = s.indexOf('\n');

if (k != -1) //存在回车符

{

lines += 1; //行数累加

//计算该页的具体文本内容,存放到相应下标的数组元素

drawText[suffix] = drawText[suffix] + s.substring(0, k + 1);

if (s.substring(k + 1).length() > 0)

s = s.substring(k + 1);

}

else

{

lines += 1; //行数累加

//将文本内容存放到相应的数组元素

drawText[suffix] = drawText[suffix] + s;

s = "";

}

}

else //已满一页时

{

lines = 0; //行数统计清零

suffix++; //数组下标加1

}

}

return drawText;

}

2、计算需要打印的总页数

public int getPagesCount(String curStr) {

int page = 0;

int position, count = 0;

String str = curStr;

while(str.length() > 0) //文本尚未计算完毕

{

position = str.indexOf('\n'); //计算回车符的位置

count += 1; //统计行数

if (position != -1)

str = str.substring(position + 1); //截取尚未计算的文本

else

str = ""; //文本已计算完毕

}

if (count > 0)

page = count / 54 + 1; //以总行数除以54获取总页数

return page; //返回需打印的总页数

}

3.1、以jdk1.4以前的版本实现打印动作按钮监听,并完成具体的打印操作

private void printTextAction() {

printStr = area.getText().trim(); //获取需要打印的目标文本

if (printStr != null && printStr.length() > 0) //当打印内容不为空时

{

PAGES = getPagesCount(printStr); //获取打印总页数

PrinterJob myPrtJob = PrinterJob.getPrinterJob(); //获取默认打印作业

PageFormat pageFormat = myPrtJob.defaultPage(); //获取默认打印页面格式

myPrtJob.setPrintable(this, pageFormat); //设置打印工作

if (myPrtJob.printDialog()) //显示打印对话框

{

try {

myPrtJob.print(); //进行每一页的具体打印操作

}

catch(PrinterException pe) {

pe.printStackTrace();

}

}

}

else { //如果打印内容为空时,提示用户打印将取消

JOptionPane.showConfirmDialog(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Emp ty", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSA GE);

}

}

3.2、以jdk1.4新版本提供的API实现打印动作按钮监听,并完成具体的打印操作

private void printText2Action() {

printFlag = 0; //打印标志清零

printStr = area.getText().trim();//获取需要打印的目标文本

if (printStr != null && printStr.length() > 0) //当打印内容不为空时

{

PAGES = getPagesCount(printStr); //获取打印总页数

//指定打印输出格式

DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;

//定位默认的打印服务

PrintService printService = PrintServiceLookup.lookupDefaultPrintService();

//创建打印作业

DocPrintJob job = printService.createPrintJob();

//设置打印属性

PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

DocAttributeSet das = new HashDocAttributeSet();

//指定打印内容

Doc doc = new SimpleDoc(this, flavor, das);

//不显示打印对话框,直接进行打印工作

try {

job.print(doc, pras); //进行每一页的具体打印操作

}

catch(PrintException pe) {

pe.printStackTrace();

}

}

else { //如果打印内容为空时,提示用户打印将取消

JOptionPane.showConfirmDialog(null, "Sorry, Printer Job is Empty, Print Cancelled!", "Emp ty", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSA GE);

}

}

3.2 打印预览

3.2.1应用场景

大多少商业应用都需要提供打印预览机制,它可以让我们在屏幕上看到页面,这样就不会因为不喜欢的打印结果而浪费纸张。假设我们在打印上一节所说的文本之前,需要先进行打印预览。那么该怎么实现呢?

界面实现图示如下:(Next预览下一页,Preview预览前一页,Close则关闭预览)

3.2.2解决方法

基本思路:虽然Java2平台的打印API并不提供标准的打印预览对话框,但是自己来进行设计也并不复杂。正常情况下,print方法将页面环境绘制到一个打印机图形环境上,从而实现打印。而事实上,print方法并不能真正产生打印页面,它只是将待打印内容绘制到图形环境上。所以,我们可以忽略掉屏幕图形环境,经过适当的缩放比例,使整个打印页容纳在一个屏幕矩形里,从而实现精确的打印预览。

在打印预览的设计实现中,主要需要解决两个问题。

第一,如何将打印内容按合适的比例绘制到屏幕;

第二,如何实现前后翻页。

下面我给出这两个问题的具体实现方法,完整的实现请参看附件中的PrintPreviewDialog.java 文件。

/*将待打印内容按比例绘制到屏幕*/

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D)g;

PageFormat pf = PrinterJob.getPrinterJob().defaultPage(); //获取页面格式 double xoff; //在屏幕上页面初始位置的水平偏移

double yoff; //在屏幕上页面初始位置的垂直偏移

double scale; //在屏幕上适合页面的比例

double px = pf.getWidth(); //页面宽度

double py = pf.getHeight(); //页面高度

double sx = getWidth() - 1;

double sy = getHeight() - 1;

if (px/py < sx/sy) {

scale = sy / py; //计算比例

xoff = 0.5 * (sx - scale * px); //水平偏移量

yoff = 0;

}

else {

scale = sx / px; //计算比例

xoff = 0;

yoff = 0.5 * (sy - scale * py); //垂直偏移量

}

g2.translate((float)xoff, (float)yoff); //转换坐标

g2.scale((float)scale, (float)scale);

Rectangle2D page = new Rectangle2D.Double(0, 0, px, py); //绘制页面矩形 g2.setPaint(Color.white); //设置页面背景为白色

g2.fill(page);

g2.setPaint(Color.black);//设置页面文字为黑色

g2.draw(page);

try {

preview.print(g2, pf, currentPage); //显示指定的预览页面

}

catch(PrinterException pe) {

g2.draw(new Line2D.Double(0, 0, px, py));

g2.draw(new Line2D.Double(0, px, 0, py));

}

}

/*预览指定的页面*/

public void viewPage(int pos) {

int newPage = currentPage + pos; //指定页面在实际的范围内

if (0 <= newPage && newPage < preview.getPagesCount(printStr)) {

currentPage = newPage; //将指定页面赋值为当前页

repaint();

}

}

这样,在按下"Next"按钮时,只需要调用canvas.viewPage(1);而在按下"Preview"按钮时,只需要调用canvas.viewPage(-1)即可实现预览的前后翻页。

3.3 打印图形

3.3.1应用场景

在实际应用中,我们还需要打印图形。譬如,我们有时需要将一个Java Applet的完整界面或一个应用程序窗体及其所包含的全部组件都打印出来,又应该如何实现呢?

3.3.2解决方法

基本思路如下:在Java的Component类及其派生类中都提供了print和printAll方法,只要设置好属性就可以直接调用这两个方法,从而实现对组件及图形的打印。

/*打印指定的窗体及其包含的组件*/

private void printFrameAction() {

Toolkit kit = Toolkit.getDefaultToolkit(); //获取工具箱

Properties props = new Properties();

props.put("awt.print.printer", "durango"); //设置打印属性

props.put("awt.print.numCopies", "2");

if (kit != null) {

//获取工具箱自带的打印对象

PrintJob printJob = kit.getPrintJob(this, "Print Frame", props);

if (printJob != null) {

Graphics pg = printJob.getGraphics(); //获取打印对象的图形环境

if (pg != null) {

try {

this.printAll(pg); //打印该窗体及其所有的组件

}

finally {

pg.dispose(); //注销图形环境

}

}

printJob.end(); //结束打印作业

}

}

}

3.4 打印文件

3.4.1应用场景

在很多实际应用情况下,我们可能都需要打印用户指定的某一个文件。该文件可能是图形文件,如GIF、JPEG等等;也可能是文本文件,如TXT、Java文件等等;还可能是复杂的PDF、DOC 文件等等。那么对于这样的打印需求,我们又应该如何实现呢?

3.4.2解决方法

基本思路:在jdk1.4以前的版本,要实现这样的打印功能将非常麻烦和复杂,甚至是难以想象的。但幸运的是,jdk1.4的打印服务API提供了一整套的打印文件流的类和方法。利用它们,我们可以非常方便快捷地实现各式各样不同类型文件的打印功能。下面给出一个通用的处理方法。

/*打印指定的文件*/

private void printFileAction() {

//构造一个文件选择器,默认为当前目录

JFileChooser fileChooser = new JFileChooser(https://www.360docs.net/doc/2416635878.html,ER_DIR);

int state = fileChooser.showOpenDialog(this); //弹出文件选择对话框

if (state == fileChooser.APPROVE_OPTION) //如果用户选定了文件

{

File file = fileChooser.getSelectedFile(); //获取选择的文件

//构建打印请求属性集

PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();

//设置打印格式,因为未确定文件类型,这里选择AUTOSENSE

DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

//查找所有的可用打印服务

PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);

//定位默认的打印服务

PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();

//显示打印对话框

PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, fla vor, pras);

if (service != null) {

try {

DocPrintJob job = service.createPrintJob(); //创建打印作业

FileInputStream fis = new FileInputStream(file); //构造待打印的文件流

DocAttributeSet das = new HashDocAttributeSet();

Doc doc = new SimpleDoc(fis, flavor, das); //建立打印文件格式

job.print(doc, pras); //进行文件的打印

}

catch(Exception e) {

e.printStackTrace();

}

}

}

在上面的示例中,因尚未确定文件的类型,所以将指定文件的打印格式定义为DocFlavor.INPUT_STREAM.AUTOSENSE。事实上,如果在进行打印之前,就已确定地知道文件的格式,如为GIF,就应定义为DocFlavor.INPUT_STREAM.GIF ;如为PDF,就应该定义为DocFlavor.INPUT_STREAM.PDF;如为纯ASCII文件,就可以定义为 DocFlavor.INPUT_STREAM.TEXT_HTML_US_ASCII。等等。

jdk1.4的javax.print.DocFlavor提供了极为丰富的文件流类型,你可以根据具体的应用需求进行合适的选择。具体的API参考文档可见本文的参考资料3。

4 结束语

以上是本人在两年多J2EE应用开发中,总结的关于用Java进行打印程序设计的一些经验,希望能给大家一些启示和裨益。尽管目前用Java来实现打印功能与用Microsoft的MFC API相比确实有更多的麻烦。但jdk1.4的推出,对Java以前较弱的打印功能是一个极好的补充。相信大家如果能够很好地理解前文所述的打印程序设计实例,并加以应用和拓展,应该可以解决目前大部分应用的实际编程问题。而随着Java的进一步发展和完善,必将更好地充实其基础类库及打印API,相信用Java实现高级打印功能也将越来越不成为我们这些Java痴迷者头痛的问题。

Java程序设计在线作业-单选题2

Java程序设计在线作业2 一、单选题(共 10 道试题,共 30 分。) 1. 下列程序的输出结果是import java.io.*; public class abc { public static void main(String args[]) { String s1="Hello!"; String s2=new String("World!"); System.out.println(s1.concat(s2)); } } A. false B. Hello! C. Hello!Wofld! D. 12 2. 在浏览器中执行applet 程序,以下选项中的哪个方法将被最先执行()。 A. init() B. start() C. destroy() D. stop() 3. Java语言的类型是() A. 面向对象语言 B. 面向过程语言 C. 汇编程序 D. 形式语言 4. 下列哪一项不属于Awt布局管理器?() A. GridLayout B. CardLayout C. BorderLayout D. BoxLayout

5. 下面代码的执行结果是什么?( )<% x=3; %><% int x=5; %><%! int x=7; %> x = <%=x%>, <%=this.x%> A. x = 3, 5 B. x = 3, 7 C. x = 5, 3 D. x = 5, 7 6. Java Applet 源程序文件的扩展名为()。 A. .java B. .class C. .html D. .exe 7. 在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的()方法来完成一些画 图操作。() A. start() B. stop() C. init() D. paint() 8. 阅读下面的代码,第10行的语句将调用哪个方法?() 1. class Person { 2. public void printValue(int i, int j) {/*…*/ } 3. public void printV alue(int i){/*...*/ } 4. } 5. public class Teacher extends Person { 6. public void printValue() {/*...*/ } 7. public void printValue(int i) {/*...*/} 8. public static void main(String args[]){ 9. Person t = new Teacher(); 10. t.printValue(10); 11. } 12. } A. 行2 B. 行3 C. 行6

计算机程序设计实践

江苏科技大学 课程实践报告 设计题目: 计算机程序设计实践(VC++) 设计时间: 2015. 3.9 至2015. 3.16 学院: 数理学院 专业班级: 13级信息与计算科学1班 学生姓名: 陈明敏学号1340501101 指导老师: 华伟 2015年5月1日

一、 实践任务 任务一:试建立一个类SP ,求(,)123k k k k f n k n =++++ ,另有辅助函数power ()用 于求 n m 。具体要求如下。 (1)私有数据成员。 Int n ,k :存放公式中n 和k 的值。 (2)公有成员函数。 ①SP(int n1,int k1):构造函数,初始化成员数据n 和k 。 ②int power(int m,int n):求n m 。 ③int fun():求公式的累加和。 ④void show():输出求得的结果。 二、源程序清单 #include class SP{ private: int n,k; public: SP(int n1,int k1); int power(int m,int n); int fun(); void show (); }; SP::SP(int n1,int k1){ n=n1; k=k1; } int SP::power(int m,int n){ int a=m; for(int i=1;i

java程序设计实习报告

《Java程序设计》 实 习 报 告 中原工学院信息商务学院 经济管理系 2010年6月20号

目录 一、实习题目 (2) 二、实习目的 (2) 1、社会需求 (2) 2、专业需求 (2) 三、开发环境 (2) 四、实习内容 (3) 1、系统功能需求 (3) 2、数据库需求 (4) 五、设计过程 (4) 1、总体设计 (4) 2、详细设计 (5) 六、调试过程 (5) 七、实习小结 (5) 八、参考资料 (6)

一、实习题目 学生信息管理系统的设计与开发 二、实习目的 1、社会需求 一直以来学生的成绩管理是学校工作中的一项重要内容,随着办学规模的扩大和招生人数的增加,学校工作繁杂、资料重多,普通的成绩管理已不能适应时代的发展,它浪费了许多的人力和物力。在当今信息时代这种传统的管理方法必然被以计算机为基础的信息管理系统所代替。虽然管理信息系统已进入高校,但还未普及而且对于学生成绩管理来说,还没有一套完整的、统一的系统,建立一个成绩维护系统是非常必要的。建立学生成绩管理系统,采用计算机对学生成绩进行管理,能进一步提高办学效益和现代化水平。帮助广大教师提高工作效率,实现学生成绩维护工作流程的系统化、规范化和自动化。2、专业需求 《Java程序设计》课程是电子商务专业的一门专业必修课程,通过java实习不仅可以提升本专业我们对此课程中的理论知识的综合应用能力而且可以提高我们的逻辑思维能力、软件开发能力。我们通过Java技术在Windows平台下开发学生信息管理系统。能够切实提高我们的程序设计水平,在实践中掌握面向对象程序设计的开发思想。 三、开发环境 操作系统;Windows XP 编程环境:MyEclipse 6.0

Java实现打印功能

Java实现打印功能 用java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Graphics2D直接输出直接输出。 下面代码实现了简单的打印功能: import java.awt.BasicStroke; import java.awt.Color; import https://www.360docs.net/doc/2416635878.html,ponent; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Toolkit; import java.awt.RenderingHints; import java.awt.font.FontRenderContext; import java.awt.font.LineBreakMeasurer; import java.awt.font.TextAttribute; import java.awt.font.TextLayout; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import java.awt.print.Book; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.text.AttributedString; import javax.swing.JApplet; public class PrintTest implements Printable{ /** * @param Graphic指明打印的图形环境 * @param PageFormat指明打印页格式(页面大小以点为计量单位,1点为1英才的1/72,1英寸为25.4毫米。A4纸大致为595×842点) * @param pageIndex指明页号 **/

java程序设计实践实习报告

竭诚为您提供优质文档/双击可除java程序设计实践实习报告 篇一:JAVA实习报告 实习报告 实习性质:JAVA程序设计学生姓名:胡桂豪专业班级:计应103指导教师:万青、陈戈、谢先伟实习时间:20XX-12-31—20XX-1-6实习地点:4312 重庆工程职业技术学院 目录 1实习目的................................................. ................................................... . (4) 2实习内容................................................. ................................................... . (4) 2.1设计文

档................................................. ................................................... . (4) 2.2需求分析................................................. ................................................... .. (6) 2.3设计方法................................................. ................................................... .. (6) 2.3.1chessFrame主要功能................................................. . (6) 2.3.2游戏主窗体................................................. ................................................... (7) 2.3.3主菜单................................................. ................................................... ..(:java程序设计实践实习报告).. (8)

计算机程序设计(C)综合实践

计算机程序设计(C)综合 实践 设计报告 学院:电子通信与物理学院 设计名称:职工信息管理系统 专业班级:电子信息科学与技术14-2 学生:本良 学号: 201401100211 组号: 140203 指导教师:宋戈 完成时间: 2015年 7月23日

目录 第1部分实训题目与要求 (2) 1. 问题提出 (2) 2. 功能要求 (2) 3. 任务分工 (2) 第2部分设计实训题目功能......................................................................... . (3) 1. 总体设 计...................................................................... (3) 2. 数据结 构...................................................................... (4) 3. 程序设 计...................................................................... (5) 4. 测试与调 试......................................................................

(8) 第3部分实训总结......................................................................... . (12) 1. 个人总 结...................................................................... (12) 2. 结束 语...................................................................... (12) 第4部分参考文献......................................................................... . (13) 《C程序设计综合实践》评分表......................................................................... (14)

《java程序设计》作业答案

《JA V A程序设计》作业答案 一、选择题 1、编译HelloWorld.java的正确命令是: C) javac HelloWorld.java 2、正确运行HelloWorld.java的正确命令是: A)java HelloWorld 3、下面程序代码,使用多行注释正确的是: C)/* int k=9; int j=8; k = k + j; */ 4、long型的取值范围是: D)-263~263-1 5、下面不属于Java保留字的是: C)malloc 6、下面属于非法的Java标识符的是: D) abc-d 7、对与System.out.println()语句解释合理的是: C)执行后输出一个空行 8、阅读下面的代码,回答问题, for( m = 0 ; m > -2 ; m -- ){….} For循环执行多少次: C)2 9、阅读下面的代码,回答问题, for( m = 0; m < 5; m++ ) { System.out.print( m + "," ); if( m == 3 ) break; } 执行结果是: C)0,1,2,3, 10、阅读下面的代码,回答问题, public class Ex { int x = 1; void m() { int x = 3; System.out.print( "x= " + x); } public static void main( String[] args ) { Ex ex = new Ex();

ex.m(); } } 执行结果是: B)x=3 11、下面语句在编译时不会出现错误信息的是: a) float f = 1.3; b) char c = "a"; c) byte b = 257; d) boolean b = null; e) int i = 10; 12、编译和运行下面的代码,会有什么结果产生: public class MyClass { public static void main(String arguments[]) { amethod(arguments); } public void amethod(String[] arguments) { System.out.println(arguments); System.out.println(arguments[1]); } } a) 错误,静态方法不能直接引用非静态方法b) 错误,主方法有错误 c) 错误,数据定义有错误d) 方法amethod必须被声明为String型 13、编译期间会出错的是: a) import java.awt.*; package Mypackage; class Myclass {} b) package MyPackage; import java.awt.*; class MyClass{} c) /*This is a comment */ package MyPackage; import java.awt.*; class MyClass{} 14、byte型的变量的表示范围为: a) -128 to 127 b) (-2 power 8 )-1 to 2 power 8 c) -255 to 256 d) 依赖Java虚拟机而定 15、在命令行运行命令:java myprog good morning 会有什么结果显示出来: public class myprog{ public static void main(String argv[]) { System.out.println(argv[2]) } } a) myprog b) good c) morning

JavaPrintService_Java打印API_用户手册_中文版

目录 第一章介绍 Java平台打印的历史 JDK 1.3 JDK 1.2 JDK 1.1 Java Print Service API能做什么 Java Print Service 构架 javax.print包 发现打印服务 指定打印数据格式 创建打印工作 javax.print.event包 应用程序如何使用JPS 一个基本的例子 第二章属性 属性的类别和值 属性角色 属性集 如何指定属性 标准属性 OrientationRequested Copies Media MediaSize MediaPrintableArea Destination SheetCollate Sides Fidelity 使用JPS属性 第三章指定文档类型 用户格式打印数据 预定义数据格式的MIME类型 文本数据 页面描述语言文档 图像数据 自适应打印数据 表示类 字符编码的重要性 服务格式打印数据 怎样使用DocFlavor 第四章打印及流化文档

比较StreamPrintService与PrintService 定位服务 发现打印服务 发现流打印服务 获得一个打印工作 创建DOC 注册事件 打印服务事件 打印工作事件 PrintJobAttributeListener PrintJobListener 提交打印工作 向打印机提交打印工作 向流提交打印工作 打印服务提供商 第五章打印及流化2D图像 使用打印工作打印或流化图像 打印2D图像 流化2D图像 使用服务格式数据 打印服务格式数据 流化服务格式打印数据 示例:PrintPS.java 示例:PrintGIFtoStream.java 示例:Print2DPrinterJob.java 示例:Print2DGraphics.java 示例:Print2DtoStream.java 示例:PrintGIF.java Java Print Service 词汇表

Java程序设计实训报告

陕西国际商贸学院Java实训报告 专业:计算机科学与技术 班级: 姓名: 学号: 指导老师:

前言 Java自问世以来,以其得天独厚的优势,在IT业界掀起了研究、开发它的浪潮,显示了鹏程万里的美好前景。作为一种与底层硬件无关的、“编写一次,到处运行”的高级语言和计算平台,Java天生就具有将网络上的各个平台连成一体的能力,真正实现了“网络就是计算机”的理念。以Java为代表的网络的成长,改变了我们的联系方式、生活方式、学习方式和经营方式。它的来到使我们目睹了一场类似印刷术的重大变革。毫无疑问,它将影响人类社会的发展,这就是:Java加速人类进入网络时代! 本次课程设计是配合JAVA程序设计课程,帮助我们深入学习掌握JAVA语言,熟练运用这个工具来编写的。通过课程设计各个项目的综合训练,不仅培养学生实际分析问题、编程和动手能力,而且还提高了学生的综合素质。本课程设计尝试使用一些较生动的示例和设计项目,激发学生学习兴趣,引导学生主动学习以及正确理解、接受需要重点掌握的知识点,为参加项目开发及更深入学习做好准备。本次课程设计主要是用JAVA实现围棋系统,能够实现画笔、画直线、画圆形、并修改该画笔的大小以及颜色。该围棋程序还需具有悔棋功能以及选择棋盘大小的功能。

2014年6月11日 目录 一、实训目的及要求 (4) 二、概要设计 (5) 三、详细设计 (6)

四、功能分析 (7) 五、测试数据及运行结果 (10) 六、总结 (14)

一、实训目的及要求 1. 1 实训目的 1.使学生熟练掌握,java编成的基础知识,以及巩固图形界面及绘图知识点。 2.结合软件工程,熟悉软件开发过程。 3.训练了学生学生独立编程以及调试程序的能力。 4.训练学生对于算法的理解和设计能力。 5.加强了学生实际动手能力,以及对于面向对象方法学的理解。 6.巩固图形界面排版,以及界面的设计能力。 7.加强学生对于所学知识的理解及运用。 1.2 实训要求 1.需交电子版和纸制板实训报告各一份,电子版海源程序。 2.程序必须可运行。 3.界面必须保证美观。 4.操作简单易学。 5.各项功能不可缺损。 6.报告版面美观,易读。 二、概要设计 1. 整个围棋程序分为3个部分:棋盘、棋子、围棋主类 软件结构图(见图一):

java大作业编一个程序打印出公司月各员工工资

姓名:王镱澍 Java大作业 一、题目 白浪公司的雇员根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。 雇员分为以下若干类: SalariedEmployee:拿固定工资的员工。 HourlyEmployee:按小时拿工资的员工。 SalesEmployee:销售人员,工资由月销售额和提成率决定。 BasePlusSalesEmployee:有固定底薪的销售人员,工资由底薪加上销售提成。 公司会给SalaryEmployee每月另外发放2000元加班费,给 BasePlusSalesEmployee发放1000元加班费。编一个java程序创建上述若干类,并实现确定月份以及该月不同员工的工作情况后打印出该公司该月各员工工资,公司总的工资支出情况。 二、程序功能说明 编一个java程序创建上述若干类,并实现确定该月不同员工的工作情况以及输入月份后打印出该公司该月各员工工资,公司总的工资支出情况。 三、类、属性、方法说明 程序中已给出详细解释在此只作简要说明: Employee:这是所有员工总的父类。 属性:员工的姓名和生日月份。 方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。 SalariedEmployee:Employee的子类,拿固定工资的员工。 属性:月薪。 方法:每月工作超出160小时的部分按照倍工资发放。 HourlyEmployee:Employee的子类,按小时拿工资的员工。 属性:每小时的工资、每月工作的小时数。 SalesEmployee:Employee的子类,销售人员。 属性:月销售额、提成率。 方法:工资由月销售额和提成率决定。 BasePlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员。 属性:底薪。 方法:工资由底薪加上销售提成部分。 四、程序代码 import .*; class MyException extends Exception {

Java程序设计实验题目

1.Java程序设计基础 实训项目一:Java开发环境安装与使用(2学时) 实训内容: (1)下载并安装JDK; (2)安装Java集成开发环境JCreator; (3)第1个java程序“Hello World”程序的编辑、编译与运行。 实训要求: 掌握Java开发环境的安装与配置,了解JCreator中ConfigureàoptionsàJDK Profiles的设置;掌握Java应用程序的编写、编译、运行过程。 实训项目二:Java基础应用(2学时) 实训内容: 编写简单的Java程序,将多种类型变量通过各种运算符组成不同的表达式,并将运算结果赋值给同类型的变量,使用print方法输出各变量的值。 实训要求: 掌握Java语言的各种数据类型;熟悉运算符和表达式的用法;学会编写完成一定目标的简单程序。 实训项目三:Java流程控制(2学时) 实训内容: (1)使用分支语句编写简单的Java程序,完成对某个实际问题的判断处理。 (2)使用循环语句编写简单的Java程序,解决需要重复处理的实际问题。 实训要求: 掌握条件语句的使用;掌握循环语句的使用;锻炼运用所学的知识解决实际问题的能力;了解常用的累加和、数学函数图形打印等基本问题的解决方法。 实训项目四:数组(2学时) 实训内容: (1)编写简单的Java程序,验证数组的声明、创建和使用。 (2)编写简单的Java程序,使用数组解决排序、查找等问题。 实训要求: 掌握一维数组、多维数组声明、创建和使用;掌握利用一维数组解决实际问题的方法;了解多维数组的应用。 2.类和对象、包、接口 实训项目五:类与对象的基本操作(2学时) 实训内容: 按照面向对象编程思想编写简单的类,对客观事物进行描述,类的定义包含成员变量声明及成员方法声明与实现,并创建对象进行类的测试。 实训要求: 掌握面向对象编程的思想;掌握类的定义、变量声明、方法声明及实现;掌握对象的创建。实训项目六:构造方法与方法重载(2学时) 实训内容: 编写含有构造方法与成员方法类,实现构造方法与成员方法的重载,编写该类的测试类。实训要求: 掌握构造方法的定义;理解构造方法的原理;掌握方法重载的实现;理解静态多态的概念。实训项目七:类的继承与多态(2学时) 实训内容:

Java程序设计课程作业

Java程序设计课程作业 第一章绪论 1、安装Java SDK到你的电脑中。 2、选择安装一种Java开发工具到你的电脑中。Jcreater、NetBeans、Eclipse 3、编译并运行一个“Hello World”Java程序。 程序代码: // public class App2_1 { public static void main(String[]args) { System.out.println("hello Word"); } } 4、编译并运行一个Java Applet程序。 答:编译成功,不过浏览器不显示自己的Applet程序,还在学习中,错误的原因是自己电脑上java的安全设置的原因,修改后运行成功。 第二章Java语法基础 1、下列表达式是否有错?若有错,请说明何处出现何种错误;若无错,请给出其值。 (1) 3+4<<2^-8 没有错误,运行结果为-28 (2) 36>>2*4&48<<8/4+2 运行结果为0

有错误,||这个运算规律是两边均为boolean型 (4) 2*4&&0<2||4%2 有错误,||这个运算规律是两边均为boolean型 2、任意准备一份学生成绩表,其中包括至少3门课程、每门课程至少10名同学的成绩。请编写程序完成以下功能:(1) 统计并输出各门课程的平均成绩。(2) 输出等级表:优、良、中、及格及不及格。 import java.util.*; class student{ String num; doublemath; doubleenglish; doublechinese; } publicclass Test{ publicstaticvoid main(String[]agrs){ student stu[]=new student[11]; for(int i=0;i<10;i++) stu[i]=new student(); Scanner reader=new Scanner(System.in); System.out.println("请依次输入十个同学的数学,英语。语文的成绩:"); for(int i=0;i<=10;i++){ System.out.println("第"+(i+1)+"同学的数学,英语。语文的成绩:"); stu[i].math=reader.nextInt(); stu[i].english=reader.nextInt(); stu[i].chinese=reader.nextInt(); } double sum=0; for(int i=0;i<10;i++) sum=sum+stu[i].math; float A=(float)sum/10; System.out.println("数学平均成绩:"+A); //int sum;

c语言程序设计实践教程答案完整版

4.2练习题 一、选择题 1.D 2.B 3.A 4.B和D 5.C 6.A 7.B 二、填空题 1.//或/* */ 2.主或main 3.函数首部和函数体4.编译和连接 5.分号 5.2练习题 一、选择题 1.A 2.D 3.B 4.B 5.C 6.C 7.D 8.A 9.B 10.B 11.D 12.B 13.A或B 14.C 15.B

17.D 18.D 19.C 20.D 21.B 22.A 23.D 24.C 25.C 26.B 27.C 28.D 29.A 30.B 二、填空题 1.102,10 2.#define 宏名字符串 3.1 4.n=1 5.-4 6.a=1,b= ,c=2 7.c=A 8.n1=%d\nn2=%d 9.a+b>c&&a+c>b&&b+c>a 10.ch>=’a’&&ch<=’z’|| ch>=’A’&&ch<=’Z’11.7 12.0 13.8,4 6.2练习题 一、选择题 1.A 2.C 3.D 4.C 5.A 6.B

8.D 9.B 10.C 11.A 12.A 13.C 14.B 15.正确答案为: 二、填空题 1.10 2.y=1 x%i==0 3.屏幕中间输出一个由星号组成的菱形4.1 5.13 6.(cx=getchar())!=-1 front=cx; 7.m%n 8.4 9.*p px=&x py=&y 三、读程序,写结果 1.-1 2.3,1,-1, 3.a=16,y=60 4.x=12,y=4 5.59 7.2练习题 一、选择题 1.B 2.C 3.C 4.A 5.D 6.C 7.D

打印java方法参数

打印Java方法参数 首先描述一下具体的需求就是,能不能不需要手动添加代码就能打印Java方法所有的参数,这有些时候在我们调试代码的时候有很重要的帮助。 按照这个需求,我们可以想一下我们大体需要一下什么信息,方法的名称,方法参数类型,方法参数的名字,方法参数的值。 如何实现不写代码就能够实现动态的打印这些信息呢,了解Java的这时候就都会想到动态代理。有了动态代理我们就可以不用写代码了,但是为了区分哪些方法需要打印,哪些方法不需要打印,我们这里还需要注解来辅助区分需要打印的方法。 如何获取需要打印的信息呢,这里我相信大家都会想到反射,但是反射这里有一个参数是拿不到的,哪个参数呢,方法参数的名字是拿不到的。这里我们采用的是asm的方式来获取方法参数的名字。 到这里功能已经描述清楚,需要用到的技术也描述清楚,接下来就是具体怎么实现了。 首先,我们设计了一个注解类如下: import https://www.360docs.net/doc/2416635878.html,ng.annotation.ElementType; import https://www.360docs.net/doc/2416635878.html,ng.annotation.Retention; import https://www.360docs.net/doc/2416635878.html,ng.annotation.RetentionPolicy; import https://www.360docs.net/doc/2416635878.html,ng.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public@interface MethodLog { } 接下来就是我们设计的最后要打印的数据的一个简单的封装类,如下: public class MethodInfo { private int index;//参数的索引 private Object parameterType;//参数的类型 private String parameterName;//参数的名称 private Object parameterValue;//参数的值 public MethodInfo(){} public MethodInfo(int index, Object parameterType, String parameterName, Object parameterValue) { super(); this.index = index; this.parameterType = parameterType; this.parameterName = parameterName; this.parameterValue = parameterValue; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; }

《Java语言程序设计》实践环节答案

《Java程序设计》实践环节考核指导 样题一 一、纠正程序“a1.java”的语法错误,然后回答问题(25分)。 (1)纠正程序中的语法错误。见阴影部分 (2)程序的功能是什么?计算阶乘之和 如果向程序中输入数据7,程序运行的结果是什么?结果是8 请把程序运行结果的贴图存储到ans.doc中。 二、程序中有若干空白,请完善程序题目,并回答问题(40分)

1、程序A21的功能是判断2~N之间哪些整数是质数(n从键盘输入)。请完善程序,并把程序运行结果的贴图存储到ans.doc中。 2、程序A22的功能是单击按钮【求平方】,就能够输出文本框中输入数据的平方,请把程序补充完整,并把程序运行结果的贴图存储到ans.doc中。 三、程序设计(35分) 编写数组处理程序a3.java。要求定义整型数组,并从键盘上输入10个数据,然后求出其中的最大者和所有数据的总和。 答案 import java.util.Scanner; public class A3{ public static void main(String[] args){ Scanner sc=new Scanner(System.in); int a[]=new int[10]; //赋值 for(int i=0;i

Java程序设计大作业实验报告

目录 一、前言 (2) 二、需求分析 (3) 三、系统总体设计 (3) 3.1系统总体设计系统思路 (3) 3.2数据库设计 (4) 3.2.1 login1表的设计和数据 (4) 3.2.2 student表的设计和数据 (5) 3.2.3 course表的设计和数据 (5) 3.2.4 score表的设计和数据 (5) 3.3系统功能模块设计 (6) 四、系统详细设计 (7) 4.1登录模块 (7) 4.2 学生模块 (7) 4.3 教师模块 (7) 4.4 管理员模块 (8) 五、系统测试及运行结果 (9) 5.1 主界面 (9) 5.2 学生管理中心界面 (9) 5.3 教师管理中心界面 (10) 5.4 管理员管理中心界面 (10)

5.5 查询课表界面 (11) 5.6 查询成绩界面 (11) 5.7 查询教学情况界面 (11) 5.8 查询所有学生成绩界面 (12) 5.9 学生信息管理界面 (12) 5.10 学生成绩管理界面 (13) 5.11 用户管理界面 (13) 六、实验总结 (14) 七、参考文献 (14) 一、前言 随着计算机在人们生活中的普及和网络时代的来临,对信息的要求日益增加,学生信息管理业务受到了较为强烈的冲击,传统的手工管理方式传统的手工管理方式已不能适应现在的信息化社会。如何利用现有的先进计算机技术来解决学生信息管理成为当下的一个重要问题,学生信息管理系统是典型的信息管理系统,其开发主要就是针对前台的页面展示以及后台数据的管理。对于前者,要求应用程序功

能完备,易于使用,界面简单;而对于后者,则要求数据库具有一致性、完整性,并能够依据前台的操作来对应操作后台数据库达到一定的安全性。 本学生信息管理系统主要采用的纯JAVA代码实现图形界面系统的开发,以及数据库知识进行数据的查询,删除,插入和更新。本系统主要分为三个部分:学生模块、教师模块、管理员模块。其中学生模块实现的功能:查询课表信息和查询成绩。教师模块实现的功能:查询课表信息、查询教学情况和查询所有学生的各科成绩。管理员模块实现的功能:课表信息的管理、学生信息管理、学生成绩管理和用户信息管理。 二、需求分析 用JAVA语言实现学生信息管理系统的图形界面的编程。主要实现以下几个重要功能: ①实现三种不同身份(学生、教师、管理员)登录学生信息管理系统。(其中的数据信息保存在数据库中)

程序设计实践报告模板

面向对象程序设计实践(Project 2) 报告 题目: 专业软件工程(NIIT) 学生姓名 班级学号 指导教师杨健 指导单位计算机学院/软件学院 日期

评分细则 评分项优秀良好中等差遵守机房规章制度 上机时的表现 学习态度 程序准备情况 程序设计能力 团队合作精神 课题功能实现情况 算法设计合理性 用户界面设计 报告书写认真程度 内容详实程度 文字表达熟练程度 回答问题准确度 简短 评语教师签名: 年月日 评 分 等 级 备 注 评分等级有五种:优秀、良好、中等、及格、不及格

Title(Here,please write the name of your Project) (题目格式:宋体,3号,加粗,居中对齐) 一、D escription and Requirement(格式:Times New Roman,4号,加粗, 两端对齐) (正文格式:宋体(中文) Times New Roman(英文),小4号,不加粗,两端对齐, 1.5倍行距) 二、Requirement Analysis(格式:Times New Roman,4号,加粗,两端对齐) 在该部分中叙述系统的功能,由此得到相应的模块,并分析需要什么的数据,由此可以指导数据库的设计。 (正文格式:宋体(中文)Times New Roman(英文),小4号,不加粗,两端对齐,1.5倍行距) 三、High level design(格式:Times New Roman,4号,加粗,两端对齐) 在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义,如果用面向对象的方法,应该给出类中成员变量和成员函数原型声明),数据库设计的说明(给出数据库的结构,包括有哪些表,每个表有什么字段,分别存储什么样的数据) (正文格式:宋体(中文)Times New Roman(英文),小4号,不加粗,两端对齐, 1.5倍行距) 四、Low level design格式:Times New Roman,4号,加粗,两端对齐) 各个算法实现的源程序(可以是一组源程序,每个功能模块采用不同的函数实现),源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 注意:不要粘贴全部程序,只要把关键算法的程序粘贴过来就可以了。 (正文格式:宋体(中文)Times New Roman(英文),小4号,不加粗,两端对齐, 1.5倍行距) 五、Tested data and result analysis(格式:Times New Roman,4号,加粗,

Java打印程序设计

Java打印程序设计 1 前言 在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Java提供的打印功能一直都比较弱。实际上最初的jdk根本不支持打印,直到jdk1.1才引入了很轻量的打印支持。所以,在以前用Java/Applet/JSP/Servlet设计的程序中,较复杂的打印都是通过调用ActiveX/OCX控件或者VB/VC程序来实现的,非常麻烦。实际上,SUN公司也一直致力于Java打印功能的完善,而Java2平台则终于有了一个健壮的打印模式的开端,该打印模式与Java2D图形包充分结合成一体。更令人鼓舞的是,新发布的jdk1.4则提供了一套完整的"Java 打印服务 API" (Java Print Service API),它对已有的打印功能是积极的补充。利用它,我们可以实现大部分实际应用需求,包括打印文字、图形、文件及打印预览等等。本文将通过一个具体的程序实例来说明如何设计Java打印程序以实现这些功能,并对不同版本的实现方法进行分析比较,希望大家能从中获取一些有益的提示。 2 Java中的打印 2.1 Java的打印API Java的打印API主要存在于java.awt.print包中。而jdk1.4新增的类则主要存在于javax.print 包及其相应的子包javax.print.event和javax.print.attribute中。其中javax.print包中主要包含打印服务的相关类,而javax.print.event则包含打印事件的相关定义,javax.print.attribute则包括打印服务的可用属性列表等。 2.2 如何实现打印 要产生一个打印,至少需要考虑两条: 需要一个打印服务对象。这可通过三种方式实现:在jdk1.4之前的版本,必须要实现java.awt.print.Printable接口或通过Toolkit.getDefaultToolkit().getPrintJob来获取打印服务对象;在jdk1.4中则可以通过javax.print.PrintSerivceLookup来查找定位一个打印服务对象。 需要开始一个打印工作。这也有几种实现方法:在jdk1.4之前可以通过java.awt.print.PrintJob(jdk1.1提供的,现在已经很少用了)调用print或printAll方法开始打印工作;也可以通过java.awt.print.PrinterJob的printDialog显示打印对话框,然后通过print方法开始打印;在jdk1.4中则可以通过javax.print.ServiceUI的printDialog显示打印对话框,然后调用print方法开始一个打印工作。 2.3 打印机对话框 2.3.1 Printable的打印对话框 开始打印工作之前,可以通过PrinterJob.printDialog来显示一个打印对话框。它给用户一个机会以选择应该打印的页码范围,并可供用户改变打印设置。它是一个本地对话框。

相关文档
最新文档