熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2022-06-13   來源: Java核心技術 

  PrintJobPrintable類
  打印主要通過PrintJob類的print的回調函數來實現打印的全部工作PrintJob類是抽象類不能new一個實例但通過它的一個靜態方法getPrintJob就可以得到一個PrintJob句柄有了這樣一個操縱桿我們可以隨時打開開關叫它快給我打印!(print)如果這樣它會問你叫我打印什麼呢?即回調你的打印內容如果你沒有打印的內容它會拋出一句話沒有東西嘛!(PrintException)否則它就會忠實的根據需求打印
  所以你應該提供一個可打印的內容(Printable)只有一個方法需要你實現
  print(Graphics g PageFormat pf int pageIndex );
  你所有的打印控制其實都是在該方法中實現提供一個最簡單的例子
  import javaawtGraphics;
  import javaawtprint*;
  public class TestPrint {
  public static void main(String[] args) {
  PrintJob job = PrintJobgetPrintJob();//獲得句柄
  jobsetPrintable(new Hello());//告訴job到哪裡找打印內容
  try{
  jobprint();//快給我打印!
  }catch(PrintException e) {
  Systemoutprintln(沒有東西嘛!);//或打印機硬件問題
  }
  }
  
  class Hello implements Printable {//可打印的內容
  public int print(Graphics g //可以任意畫打印的內容的白紙
  PageFormat pf // 打印格式缺省
  int pageIndex ) {// 頁碼開始
  if(pageIndex != )return NO_SUCH_PAGE;//停止打印
  gdrawString(Hello World!);//在紙上畫字符串
  return PAGE_EXITS;//繼續打印
  }
  }
  }
  怎麼樣?夠方便吧發揮你的想象在Graphics上畫你喜歡的東西吧!
  
  PageFormatPaper類
  在例子中的Printable的print()方法的參數列表中PageFormat類有點陌生顧名思義它是打印的格式我們在打印過程中選擇的橫打縱打頁邊距都是由PageFormat控制的默認的格式是Letter紙普通的頁邊距(通過PrintJob的defaultPage得到)在你得到PageFormat實例後你可以輕松設置打印的區域(不能直接設置紙張的大小)打印方向如何改變紙張的大小呢?java自帶的頁面設置有幾種典型的紙張類型(AA等)如果要自定義紙張大小從PageFormat實例中的getPaper()方法獲得名為Paper的實例再通過Paper的setSize()改變紙張實際大小講了這麼多看一個例子
  
  import javaawt*;
  import javaawtprint*;
  
  
  public class TestFormat {
  public static void main(String[] args) {
  
  PrinterJob job = PrintJobgetPrinterJob();
  
  PageFormat pageFormat = jobdefaultPage();//得到默認頁格式
  
  double inch = ;//一英寸
  
  Paper paper = pageFormatgetPaper();//得到頁面格式的紙張
  papersetSize( * inch * inch);//紙張大小為英寸見方
  
  pageFormatsetImageableArea(
  inch//坐標x即左頁邊距英寸
  inch//坐標y即上頁邊距英寸
  papergetWidth() * inch//寬度英寸英寸(左右各英寸)
  papergetHeight() * inch);//高度英寸英寸(上下各英寸)
  
  pageFormatsetPaper(paper);//將該紙張作為格式
  
  jobsetPrintable(new Rect()pageFormat);//不止提供打印內容還有格式
  
  if(jobprintDialog()) {//熟悉的打印設置對話框OK返回trueCancel返回false
  try{
  jobprint();
  }catch(PrinterException e){
  Systemoutprintln(e);
  }
  }
  }
  
  class Rect implements Printable {
  public int print(Gaphics gPageFormat pageFormatint pageIndex) {
  if(pageIndex != )return NO_SUCH_PAGE;
  
  gfillRect();//畫一個的正方形
  return PAGE_EXISTS;
  }
  }
  
  }
  相對於TestPrintjava現在的例子復雜多了所有新添加的內容都有注釋本來想打印的正方形但當你興沖沖去取打印結果時你只能得到一個小的多的正方形(實際上有 = 那麼大)因為你是從紙的左上角開始畫但有一英寸的頁邊距讓你的構想變小了
  
  如果你打印的東西是統一格式的(大部分情況都是如此)打印就變得如此簡單關鍵是你在紙上畫的東西根據頁碼(pageIndex)的不同能打印不同的東西
  
  血的教訓千萬在實現的print()方法中加入控制打印結束的語句(NO_SUCH_PAGE)否則打印機會孜孜不倦的打到它打不動位置我的抽屜內還有十幾張打印機的傑作如果不是我強行關閉電源它的發揮遠不止這些
  
  預覽類的構造函數是這樣的
  public PrintPreviewer(Pageable pint page){
  pageable=p;
  pageIndex=page;
  printComponent=new PrintComponent(nullnull);
  printComponentsetBorder(BorderFactorycreateBevelBorder(
  BevelBorderRAISED));
  buildLayout();
  displayPage(pageIndex);
   }
  
   protected void buildLayout(){
   setLayout(new BorderLayout());
   JPanel panel=new JPanel();
   panelsetLayout(new FlowLayout(FlowLayoutCENTER));
   paneladd(printComponent);
   scrollPane=new JScrollPane(panel);
   add(scrollPaneBorderLayoutCENTER);
   add(getBottomPanel()BorderLayoutSOUTH);
   addListeners();
   }

From:http://tw.wingwit.com/Article/program/Java/hx/201311/25548.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.