Impressao

9 respostas
maicon.santiago

kra criei um jdesktop aplication…
soh que nao sei como imprimir uma jtable()
nao sei se uso o ireport.
Qual a melhor forma de imprimir o conteudo de uma jtable()???

9 Respostas

Raff

por que você não usa o proprio metodo JTable o metodo print() ???

maicon.santiago

Rafa valeu …realmente eh a melhor opçao …

Soh que toh com uma duvida eh que tem um cabeçalho para ser impresso tbem…e ele esta
dividido em jlabel poderia me auxiliar para que eu o imprima junto com os dados da tabela.
Abraçao!!

Raff

ai eu não tenho ideia como posso ti ajudar :slight_smile: foi mal!

maicon.santiago

Eh mais ou menos assim consigo imprimir a tabela com a funçao print() e tudo soh q essa tabela soh tem os dados do orçamento preciso criar um campo com os dados do cliente antes de pedir para imprimir a tabela…
entende??
como insiro esses dados antes
de pedir pra imprimir a tabela…

sera que tenho que criar um funçao print()

desenhar esses valores e dpois chamar a funçao table.print()

??
lucianobsi

kra e se a impressão já fosse em um papel timbrado ou com esse cabeçalho desejado não resolve?

Raff

não tem como você criar um outra coluna na tabela e colocar esses dados só para imprimir ? Ou até mesmo a ideia do luciano é legal !

maicon.santiago

Mas kra pensa assim…tenho dois internal frame …um recebe os dados dos clientes. e armazena em labels.
o outro recebe os dados dos produtos e envia pra jtable.
os labes e a tabela estao na mesma classe.
Estava pensando no seguinte instanciar a funçao print() da seguinte forma.

chame tudo que for necessario.{

desenhe os labels.(aqui o x.drawn)

desenhe a tabela(no caso o jtable.print())

print()

}

Entende mais ou menos o q quero fazer…soh que tah foda
nao tenho muita experiencia em impressao.

Acha que pode dar certo??

Raff

acho que sim cara da um tentada ai

B

Olá maicon.santiago,

Procurando em outro tópico (http://www.guj.com.br/posts/list/63580.java), achei um código que pode te ajudar…
usa a seguinte classe:

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);   
  }   
}

Com essa classe, você pode imprimir uma JFrame, JPanel, etc …
Para usar, é só você montar a tela (adicionar os JLabels, JTables, etc…)
e depois chamar o método print …

Segue um exemplo de uma janela que tem um método de impressão

import java.awt.FlowLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Main extends JFrame {
    JTextField[] caixasTexto;
    JLabel[] labels;
    
    
    public Main() {
        super("teste");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout(FlowLayout.CENTER));
        setSize(400,400);
        caixasTexto = new JTextField[6];
        labels = new JLabel[6];
        for (int i = 0; i < caixasTexto.length; i++) {
            caixasTexto[i] = new JTextField(10);
            labels[i] = new JLabel("testando: ");
            add(labels[i]);
            add(caixasTexto[i]);
        }
    }
    
    public void imprimir() {
        PrintUtilities pu = new PrintUtilities(this);
        pu.print();
    }
    
    public static void main(String[] args) {
        Main starter = new Main();
        starter.setVisible(true);
        
    }
    
    
}
Criado 10 de janeiro de 2008
Ultima resposta 18 de jan. de 2008
Respostas 9
Participantes 4