Dúvida com impressão de frames

2 respostas
wanderley.drumond
Pessoal eu tenho apenas dois frames E cada um corresponde a uma tela. O primeiro chama o segundo através de um JButton e o imprime. No action performed desse botão eu inseri este código:
Impressao impressao = new Impressao(formulario);
        Impressao.imprimir();

Onde formulario é o frame irei imprimir. Mas está dando erro dizendo que o método imprimir não é estático e está fazendo referência a um método estático.

Alguém poderia me ajudar?

A classe de impressão é essa:

class Impressao implements Printable {
    private static Formulario formulario;
    JFrame                    frameToPrint;

    public Impressao(JFrame f) {
        frameToPrint = f;
    }

    public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
        if (page > 0) {

            return NO_SUCH_PAGE;
        }

        Graphics2D g2d = (Graphics2D) g;

        g2d.translate(pf.getImageableX(), pf.getImageableY());
        frameToPrint.printComponents(g);

        return PAGE_EXISTS;
    }

    public void imprimir() {
        PrinterJob job = PrinterJob.getPrinterJob();

        job.setPrintable(this);

        boolean ok = job.printDialog();

        if (ok) {
            try {
                job.print();
            } catch (PrinterException ex) {
                // O trabalho não terminou com sucesso
                JOptionPane.showMessageDialog(null, "Ocorreu um erro na impressão, por favor tente novamente");
            }
        }
    }
}

Esse é o frame que será impresso:

public class Formulario extends javax.swing.JFrame {

   
    public Formulario(Dados_Pessoais dados_pessoais) {
        this.dados_pessoais = dados_pessoais;

        this.setVisible(false);
        setSize(476,330);

        setLocationRelativeTo(null);
        initComponents();
    }



    private void initComponents() {

        blá, blá, blá...
    }                  

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Formulario().setVisible(true);
            }
        });
    }
                   
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel l_backgroundFormulario;
    private javax.swing.JTextField l_funcionarioRelatorio;
    private javax.swing.JTextField l_funcionarioRelatorio1;
    private javax.swing.JTextField tf_cargoFormulario;
    private javax.swing.JTextField tf_orgaoEmissorFormulario;
    private javax.swing.JTextField tf_registroGeralFormulario;
    private javax.swing.JTextField tf_registroGeralFormulario1;
                       
    private static Dados_Pessoais dados_pessoais;
}

Classe main do frame que solicitará a impressão:

public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                dados_pessoais = new Dados_Pessoais();
                formulario = new Formulario(dados_pessoais);
                new Dados_Pessoais().setVisible(true);
            }
        });
    }

Por favor amigos ajudem!!

2 Respostas

kenneth

Fala brow,

Acho que a questao aqui eh como voce esta chamando…
Olha so, quando voce faz:

// Voce instancia uma variaval impressao, que possui o metodo imprimir()
Impressao impressao = new Impressao(formulario);
// Mas aqui, voce esta usando a classe (repare no I maiusculo)
// Acho que para resolver, substitua a proxima linha...
Impressao.imprimir(); // Referenciando a classe
// por...
impressao.imprimir(); // Referenciando a instancia

Abraco!

wanderley.drumond

Poxa irmão, obrigado. Um erro tão bobo que não consegui enxergar. Valeu mesmo.

Criado 26 de novembro de 2010
Ultima resposta 27 de nov. de 2010
Respostas 2
Participantes 2