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

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

怎樣在應用程序中用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();//快給我打印!
  }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();
   }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沂南县| 前郭尔| 大厂| 南宫市| 黔江区| 静安区| 左权县| 大兴区| 永仁县| 阜平县| 北票市| 巴南区| 双鸭山市| 仪陇县| 绥中县| 顺义区| 巴东县| 土默特左旗| 铜山县| 肇源县| 宣恩县| 当雄县| 麦盖提县| 柳河县| 大新县| 新和县| 宁津县| 赤水市| 商河县| 怀远县| 临潭县| 南岸区| 安徽省| 东阿县| 屏东县| 松滋市| 丰台区| 叙永县| 石河子市| 河曲县| 登封市|