亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

怎樣在應用程序中用Graphics類?

2019-11-18 12:11:13
字體:
來源:轉載
供稿:網友

  PRintJob、Printable類:
  打印主要通過PrintJob類的print的回調函數來實現打印的全部工作。PrintJob類是抽象類,不能new一個實例,但通過它的一個靜態方法getPrintJob就可以得到一個PrintJob句柄。有了這樣一個操縱桿,我們可以隨時打開開關,叫它“快給我打??!”(print),假如這樣,它會問你:“叫我打印什么呢?”,即回調你的打印內容,假如你沒有打印的內容,它會拋出一句話:“沒有東西嘛!”(PrintException)。否則它就會忠實的根據需求打印。
  所以你應該提供一個可打印的內容(Printable)。只有一個方法需要你實現:
  print(Graphics g , PageFormat pf , int pageIndex );
  你所有的打印控制其實都是在該方法中實現。提供一個最簡單的例子:
  import java.awt.Graphics;
  import java.awt.print.*;
  public class TestPrint {
  public static void main(String[] args) {
  PrintJob job = PrintJob.getPrintJob();//獲得句柄。
  job.setPrintable(new Hello());//告訴job到哪里找打印內容。
  try{
  job.print();//快給我打?。?br />  }catch(PrintException e) {
  System.out.println(“沒有東西嘛!”);//或打印機硬件問題。
  }
  }
  
  class Hello implements Printable {//可打印的內容。
  public int print(Graphics g , //可以任意畫打印的內容的白紙。
  PageFormat pf , // 打印格式,缺省。
  int pageIndex ) {// 頁碼,從0開始。
  if(pageIndex != 0 )return NO_SUCH_PAGE;//停止打印。
  g.drawString(“Hello World!”,100,100);//在紙上畫字符串。
  return PAGE_EXITS;//繼續打印。
  }
  }
  }
  怎么樣?夠方便吧,發揮你的想象,在Graphics上畫你喜歡的東西吧!
  
  PageFormat、Paper類:
  在例子中的Printable的print()方法的參數列表中,PageFormat類有點生疏,顧名思義,它是打印的格式。我們在打印過程中選擇的橫打、縱打,頁邊距都是由PageFormat控制的,默認的格式是Letter紙,普通的頁邊距(通過PrintJob的defaultPage得到)。在你得到PageFormat實例后,你可以輕松設置打印的區域(不能直接設置紙張的大?。?、打印方向。如何改變紙張的大小呢?java自帶的頁面設置有幾種典型的紙張類型(A4、A3等),假如要自定義紙張大小,從PageFormat實例中的getPaper()方法獲得名為Paper的實例,再通過Paper的setSize()改變紙張實際大小。講了這么多,看一個例子:
  
  import java.awt.*;
  import java.awt.print.*;
  
  
  public class TestFormat {
  public static void main(String[] args) {
  
  PrinterJob job = PrintJob.getPrinterJob();
  
  PageFormat pageFormat = job.defaultPage();//得到默認頁格式
  
  double inch = 72;//一英寸
  
  Paper paper = pageFormat.getPaper();//得到頁面格式的紙張
  paper.setSize(5 * inch,5 * inch);//紙張大小為5英寸見方
  
  pageFormat.setImageableArea(
  inch,//坐標x,即左頁邊距1英寸
  inch,//坐標y,即上頁邊距1英寸
  paper.getWidth() - 2 * inch,//寬度,5英寸-2英寸(左右各1英寸)
  paper.getHeight() - 2 * inch);//高度,5英寸-2英寸(上下各1英寸)
  
  pageFormat.setPaper(paper);//將該紙張作為格式
  
  job.setPrintable(new Rect(),pageFormat);//不止提供打印內容,還有格式
  
  if(job.printDialog()) {//熟悉的打印設置對話框,OK返回true,Cancel返回false
  try{
  job.print();
  }catch(PrinterException e){
  System.out.println(e);
  }
  }
  }
  
  class Rect implements Printable {
  public int print(Gaphics g,PageFormat pageFormat,int pageIndex) {
  if(pageIndex != 0)return NO_SUCH_PAGE;
  
  g.fillRect(0,0,100,100);//畫一個100的正方形
  return PAGE_EXISTS;
  }
  }
  
  }
  相對于TestPrint.java,現在的例子復雜多了,所有新添加的內容都有注釋,本來想打印100的正方形,但當你興沖沖去取打印結果時,你只能得到一個小的多的正方形(實際上有100 - 72 = 28那么大)。因為你是從紙的左上角開始畫,但有一英寸的頁邊距讓你的構想變小了。
  
  假如你打印的東西是統一格式的(大部分情況都是如此),打印就變得如此簡單,要害是你在紙上畫的東西根據頁碼(pageIndex)的不同能打印不同的東西。
  
  血的教訓:千萬在實現的print()方法中加入控制打印結束的語句(NO_SUCH_PAGE),否則打印機會孜孜不倦的打到它打不動位置。我的抽屜內還有十幾張打印機的杰作,假如不是我強行關閉電源,它的發揮遠不止這些。
  
  預覽類的構造函數是這樣的:
  public PrintPreviewer(Pageable p,int page){
  pageable=p;
  pageIndex=page;
  printComponent=new PrintComponent(null,null);
  printComponent.setBorder(BorderFactory.createBevelBorder(
  BevelBorder.RAISED));
  buildLayout();
  displayPage(pageIndex);
   }
  
   protected void buildLayout(){
   setLayout(new BorderLayout());
   JPanel panel=new JPanel();
   panel.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
   panel.add(printComponent);
   scrollPane=new JScrollPane(panel);
   add(scrollPane,BorderLayout.CENTER);
   add(getBottomPanel(),BorderLayout.SOUTH);
   addListeners();
   }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91超碰caoporn97人人| 亚洲女同性videos| 成人激情视频小说免费下载| 成人午夜一级二级三级| 国产网站欧美日韩免费精品在线观看| 精品国产自在精品国产浪潮| 欧美噜噜久久久xxx| 性欧美办公室18xxxxhd| 国产精品女视频| 亚洲肉体裸体xxxx137| 北条麻妃久久精品| 国产不卡av在线| 国产日本欧美一区二区三区在线| 91av视频在线| 日韩精品在线免费观看| 国产精品老女人精品视频| 精品久久久一区二区| 欧美国产乱视频| 亚洲国产成人精品女人久久久| 欧美日韩精品在线视频| 亚洲韩国欧洲国产日产av| 国产精品视频一区二区高潮| 成人av在线天堂| 91精品国产高清久久久久久| 国产精品欧美一区二区三区奶水| 国产欧美日韩精品在线观看| 最近中文字幕mv在线一区二区三区四区| 日韩av一区在线观看| 亚洲成人在线网| 欧美精品videofree1080p| 亚洲国产精品99| 久久久精品一区二区三区| 国产精品爱啪在线线免费观看| 国产欧美在线视频| 欧美日本精品在线| 精品伊人久久97| 亚州av一区二区| 国产精品视频1区| 一区二区三区国产在线观看| 91精品久久久久久久久久| 欧美综合激情网| 欧美亚洲在线观看| 亚洲高清免费观看高清完整版| 777午夜精品福利在线观看| 欧美亚洲伦理www| 欧美成人国产va精品日本一级| 日本久久精品视频| 欧美在线日韩在线| 欧美黑人性生活视频| 性色av一区二区三区在线观看| 成人精品在线观看| 亚洲乱码国产乱码精品精| 国产精品成久久久久三级| 日韩av网址在线观看| 日韩av在线直播| 性欧美亚洲xxxx乳在线观看| 亚洲色图日韩av| 成人国产精品日本在线| 国产日韩在线播放| 91在线国产电影| 中文字幕亚洲欧美日韩在线不卡| 综合欧美国产视频二区| 国内免费精品永久在线视频| 日韩一区在线视频| 国产精品激情自拍| 国产精品久久久久久久午夜| 国产成人一区二区三区| 欧美一区二区三区艳史| 日韩国产精品亚洲а∨天堂免| 久久精品中文字幕免费mv| 亚洲图中文字幕| 欧美激情一级二级| 色婷婷av一区二区三区久久| 亚洲综合av影视| 国产成人精品午夜| 欧美在线视频免费播放| 久久久这里只有精品视频| 欧美福利视频在线观看| 国产精品亚洲自拍| 有码中文亚洲精品| 97av视频在线| 7777精品久久久久久| 亚洲国产欧美自拍| 日韩欧美精品在线观看| 1769国内精品视频在线播放| 精品一区二区亚洲| 色樱桃影院亚洲精品影院| 97精品视频在线| 亚洲精品福利免费在线观看| 欧美亚洲国产视频小说| 国产精品永久免费在线| 亚洲免费av片| 欧美韩国理论所午夜片917电影| 日韩在线免费高清视频| 色妞一区二区三区| 在线观看亚洲视频| 色偷偷888欧美精品久久久| 欧美成人激情图片网| 日韩欧美在线中文字幕| 亚洲一区美女视频在线观看免费| 国产美女扒开尿口久久久| 精品久久久久久久久国产字幕| 欧美国产日韩一区二区在线观看| 欧美激情视频一区| 性色av一区二区三区免费| 午夜精品福利视频| www.日韩不卡电影av| 久久影视免费观看| 在线观看免费高清视频97| 亚洲视频在线播放| 日韩精品在线影院| 久久久免费精品视频| 欧美精品国产精品日韩精品| 欧美成人在线网站| 国产一区二区三区在线观看视频| 亚洲自拍欧美另类| 国产精品一区二区在线| 成人日韩av在线| 91av免费观看91av精品在线| 色综合天天综合网国产成人网| 亚洲欧美国产另类| 国产亚洲视频在线| 国产91精品久| 欧美天天综合色影久久精品| 中文字幕精品一区二区精品| 日韩欧美成人区| 国产91色在线|| 国产成人在线精品| 免费91麻豆精品国产自产在线观看| 性欧美xxxx视频在线观看| 亚洲色图激情小说| 97婷婷涩涩精品一区| 日韩视频免费大全中文字幕| 精品亚洲永久免费精品| 久久久999精品免费| 亚洲性视频网站| 亚洲国产精品嫩草影院久久| 97视频免费看| 91啪国产在线| 国产精品久久久久久久久借妻| 亚洲欧美资源在线| 在线成人激情视频| 国产精品成久久久久三级| 4438全国亚洲精品在线观看视频| 亚洲第一精品夜夜躁人人爽| 亚洲成年人影院在线| 国产欧美 在线欧美| 久久久精品999| 色婷婷综合久久久久中文字幕1| 国产亚洲福利一区| 国产日韩欧美综合| 97碰碰碰免费色视频| 亚洲欧美日韩精品久久奇米色影视| 国产自产女人91一区在线观看| 久久久久久亚洲精品中文字幕| 欧美肥老太性生活视频| 日本精品久久电影| 欧美与欧洲交xxxx免费观看| 亚洲日韩中文字幕在线播放| 日韩成人在线播放| 黑人极品videos精品欧美裸| 久久久久这里只有精品| 日韩精品极品视频免费观看| 777午夜精品福利在线观看|