Impressão

bem, oq esta faltando no meu sistema eh a parte de imprimir, eu gostaria por exemplo q antes de imprimir abrisse a janela de visualizar impressao mostrando a pagina como vai ser impressa e um botao q manda imprimir oq tem nakela pagina

como faco essa pagina de visualizacao e mando imprimir do jeito q esta nela? andei pesquisando aq no forum e TEM mt coisa, mas axei tm confuso, alem de serem topicos antigos.

alguem pode em ajudar?

bem, estou conseguindo imprimir, oq consegui foi imprimir o frame inteiro, oq noa era o resutlado esperado

entoa oq eu fiz foi fazer um Jframe com os botoes d imprimir e sair
e tem um jpanel em branco com os dados q kero q sejam impressos, mandei imprimir o jpanel so q esta dando o seguinte erro:

java.lang.NullPointerException

para eu poder imprimir esse jpanel como tenho q fazer?

Olha meu exemplo

import java.awt.*;
import javax.swing.*;
import java.awt.print.*;

public class PrintUtilities implements Printable {
  private Component componentToBePrinted;

  public static void printComponent(Component c) {
    new PrintUtilities(c).print();
  }
  
  public PrintUtilities(Component componentToBePrinted) {
    this.componentToBePrinted = componentToBePrinted;
  }
  
  public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.setPrintable(this);
    if (printJob.printDialog())
      try {
        printJob.print();
      } catch(PrinterException pe) {
        System.out.println("Error printing: " + pe);
      }
  }

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
    if (pageIndex > 0) {
      return(NO_SUCH_PAGE);
    } else {
      Graphics2D g2d = (Graphics2D)g;
      g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
      disableDoubleBuffering(componentToBePrinted);
      componentToBePrinted.paint(g2d);
      enableDoubleBuffering(componentToBePrinted);
      return(PAGE_EXISTS);
    }
  }

  public static void disableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(false);
  }

  public static void enableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(true);
  }
}

dai eu uso o metodo statico printComponent(Component c) pra imprimir e um Component do tipo JPanel ou JFrame

vlw pela ajuda.

ta horrivel desenhar no netbeans

pq qd passo pro eclipse como sempre faco as vezes os componentes sai do lugar, alinhar eles ta um inferno, boto um milimetro pra la e qd vou ver pulou mt pro la

alguem tem uma sugestao de algum modo q pode ser realizado isso melhor?

Sempre desenhei no NetBeans tmbepassei proeclipsenão dava tanto erro de posição assim não=/

[quote=Mark_Ameba]Olha meu exemplo

import java.awt.*;
import javax.swing.*;
import java.awt.print.*;

public class PrintUtilities implements Printable {
  private Component componentToBePrinted;

  public static void printComponent(Component c) {
    new PrintUtilities(c).print();
  }
  
  public PrintUtilities(Component componentToBePrinted) {
    this.componentToBePrinted = componentToBePrinted;
  }
  
  public void print() {
    PrinterJob printJob = PrinterJob.getPrinterJob();
    printJob.setPrintable(this);
    if (printJob.printDialog())
      try {
        printJob.print();
      } catch(PrinterException pe) {
        System.out.println("Error printing: " + pe);
      }
  }

  public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
    if (pageIndex > 0) {
      return(NO_SUCH_PAGE);
    } else {
      Graphics2D g2d = (Graphics2D)g;
      g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
      disableDoubleBuffering(componentToBePrinted);
      componentToBePrinted.paint(g2d);
      enableDoubleBuffering(componentToBePrinted);
      return(PAGE_EXISTS);
    }
  }

  public static void disableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(false);
  }

  public static void enableDoubleBuffering(Component c) {
    RepaintManager currentManager = RepaintManager.currentManager(c);
    currentManager.setDoubleBufferingEnabled(true);
  }
}

dai eu uso o metodo statico printComponent(Component c) pra imprimir e um Component do tipo JPanel ou JFrame[/quote]

Olá amigo! Copiei e colei o seu código em uma classe chamada “PrintUtilities”. Daí fui no NetBeans, File -> NewFile -> SwingGUIForms -> JPanel Form e arrastei algumas labels e alguns botões para dentro desse JPanel. Coloquei o nome “Impressao” nessa classe.

Daí, criei um método “main()” (na classe Impressao) assim:

public static void main(String args[]){
PrintUtilities.printComponent(new Impressao());
//onde "PrintUtilities"é a sua classe.
}

Salvei , compilei e rodei. Porém saiu uma página em branco! A impressora puxa o papel mas devolve sem imprimir nada do que está no componente!

O que posso estar fazendo de errado?

Muito Obrigado!