服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java高级编程:使用打印服务api

ad_qqread_mid_big">

接口和继承

  你第一次查看javax.print.attribute包里的接口和类时你也许会感到选择那些列表里的接口和类很麻烦。除了attribute 和attributeset和继承attributeset的hashattributeset,javax.print.attribute包里有4个子接口和类,列出在表4和图1中。


(图片较大,请拉动滚动条观看)
table 4. javax.print.attribute 里定义的接口和类

  


(图片较大,请拉动滚动条观看)
   figure 1. javax.print.attribute 包的一部分类的层次结构.
  

那么有了attribute, attributeset, 和 hashattributeset为什么需要使用这些不同的接口和继承类呢?是因为这些特殊的类是为那些特殊的属性量身定做的。比方说,我提到过当你创建打印文档的时候有个地方可以使用的属性例如colorsupported那里不能使用。当创建这样的文档,你可以使用docattributeset接口(或者更专业一点,hashdocattributeset这个继承的类),这个继承类只允许你添加继承docattribute这个接口的属性。这四种不同的模块如下:
  ?doc: 在创建文档时指定如何打印文档
  ?printjob: 打印任务的属性描述任务的状态
  ?printrequest: 初始化打印时传给任务的请求
  ?printservice:由打印服务返回来描述打印机的功能
  要知道如何工作,我们来创建一个docattributeset的实例然后为attributeset设置docattributeset和orientationrequested属性。hashdocattributeset定义了很好的结构,所有你可以很简便的如下创建实例:
docattributeset attrs = new hashdocattributeset();
  现在你已经创建了attributeset,你可以调用add方法并把它传给attribute的继承实例去。如果你看了orientationrequested这个类的文档,你会发现它包含了一系列静态的orientationrequest实例,每一个对应一种文档定位方式。要指定你想要的类型,你所要做的只是按下面的方法传给add方法一个静态的实例的引用:
docattributeset attrs = new hashdocattributeset();
attrs.add(orientationrequested.portrait);

  colorsupported类有一点不同但一样很简单,它定义了两种静态实例:一个表示支持彩色打印另一个不是。你可以试着增加一个colorsupported属性到docattributeset去,代码如下:
docattributeset attrs = new hashdocattributeset();
attrs.add(orientationrequested.portrait);
attrs.add(colorsupported.supported);

  早先提过,去指定是否支持彩色打印不恰当因为这不是程序所能控制的内容。换句话说,colorsupported这个属性放到一系列文档属性中并不合适,所以,运行先前的代码当添加colorsupported属性时会抛出一个classcastexception异常。
  要学习怎么运行,记住每一个attributeset子接口都有一个相应attribute子接口和继承子类。当添加一个属性时,继承的子类试图把attribute作为参数给相应的子接口,这样来确保只有当前适当的属性会成功添加。
  这样的话,hashdocattributeset 的add方法第一次和orientationrequested的一个实例一起调用,并成功的把它作为一个object传给docattribute。因为如图2所示,orientationrequested继承了那个接口。与之相对应,传colorsupported实例的时候因为没有继承docattribute所以失败了。



(图片较大,请拉动滚动条观看)
figure 2. javax.print.attribute 包的一部分类的层次结构
  

这个例子举例说明,表4里的四个接口和类组来保证使用正确的属性。注意模块和不同的属性之间有大量的交互,所以很多属性与不止一个模块关联。例如,许多属性继承了printjobattribute 和 printrequestattribute因为大部分是通过一个相关的打印任务获得提供给你的。你可以在初始化时指定它们。举个例子,你可以把它加到printrequestattributeset中去来指定任务名,并且在打印的时候通过printjobattributeset来返回它。因此,jobname属性类同时继承printrequestattribute 和 printjobattribute。
  attributeset and hashattributeset
  你已经知道了为什么会有四个子类,但是attributeset接口和hashattributeset父类又是什么呢?attributeset/hashattributeset在你不能确定要存储在这个集合中的那些仅仅和一个模块相关的属性时使用。记得我以前提到的lookupprintservices()方法允许你指定attributeset参数来限制返回的打印服务。表面上看来最好指定printserviceattributeset的实例,但是很多你可能用到的属性并不继承printserviceattribute。
  我们假设你想要让lookupprintservices()方法返回支持彩色打印和风景画打印的打印机。这些属性与colorsupported和orientationrequested属性关联,但是请注意这些类并不共享模块,前者是一个printserviceattribute而orientationrequested与另外三个模块(doc, printrequest,和 printjob)关联。这意味着不存在单个的attributeset接口或类来同时包含colorsupported和sides属性。
  创建attributeset的方法使用一个hashattributeset实例同时包含一个orientationrequested 和 colorsupported太简单了。不像它的子类,它并不限制你往上加特殊的属性,所以可以用以下代码成功执行:
attributeset attrs = new hashattributeset();
attrs.add(colorsupported.supported);
attrs.add(orientationrequested.landscape);
printservice[] services = printservicelookup.lookupprintservices(null, attrs);

>>>更多专题请看java api  java的类  java网络专题
上一页 1 2 3 4 下一页 
相关内容:设计  存储  vc  os  java  
【收藏此页】【大 中 小】【打印】【关闭】
上一篇:闲话java中的类型转换
下一篇:websphere sap适配器编程基础


10万个软件免费高速下载
教育教学 安全相关 游戏娱乐 源码下载 编程开发 数码软件 其它类别
网络软件 联络聊天 系统工具 媒体工具 图形图像 应用软件 行业软件
·nero 6高级使用图解
·抠图―背景橡皮擦工具的使用
·eclips使用秘技(绝对经典)
·电脑使用常见问题解答
·copy命令使用说明
·享受急速:四大主流网游加速器使用对
·ocr软件使用宝典
·高速下载+在线观看 风播bt使用教程
·ie使用技巧大全――基本技巧篇
·subversion 使用手记
 
·接口和抽象类的定义方式举例说明
·用maven制作java项目发行包
·java 基础入门 pom.xml 元素描述
·用jbuilder2007开发扩展jsf标签的插
·抽象类对象类和对象包装类
·使用java实现在文件中添加字符串
·instanceof和回调概念
·java变量的赋值与传递
·java se6调用java编译器的两种新方法
·weblogic运用db的java控件访问数据库

扫描关注微信公众号