Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    JAVA - Stampare su carta un JPanel

    ciao a tutti

    ho realizzato un'applicazione per gestire le fatture.

    ecco uno screenshot:


    il JInternalFrame è diviso in due pannelli, uno superiore dove ho tutti i dati e uno inferiore dove ho il pulsante stampa.

    Questo è il codice del pannello inferiore:


    codice:
    pannelloSotto = new JPanel();
    pannelloSotto.setSize(new Dimension(570,14));
    pannelloSotto.setBackground(Color.white);
      stampa = new JButton("Stampa la fattura");
        stampa.addActionListener(new classeStampa());
    pannelloSotto.add(stampa);
    in classestampa ho questo codice:

    codice:
    public void actionPerformed(ActionEvent e) {
      if (e.getSource() instanceof JButton) {   
          PrinterJob printJob = PrinterJob.getPrinterJob();
          printJob.setPrintable(this);
          if (printJob.printDialog()) {
            try {
              printJob.print();
            }
            catch (Exception ex) {
              ex.printStackTrace();
            }
          }
      }
    }
        
    public int print(Graphics g, PageFormat pf, int pi) throws PrinterException {
      if (pi >= 1) {
        return Printable.NO_SUCH_PAGE;
      }
      return Printable.PAGE_EXISTS;
    }
    che poi non sarebbe altro che il codice che ho trovato sul sito della sun (link al sito) cliccando su Printing the Contents of a Component.

    ed ho levato la parte che mi disegna le forme

    ovviamente levando le forme non mi stampa niente, cioè il foglio viene preso ma non stampa nulla.

    cosa dovrei inserire nel metodo print per farmi stampare solo il pannello di sopra?
    inoltre, il fatto che ho inserito il jscrollpane potrebbe creare problemi per la stampa, ad esempio stampandomi solamente quello che vedo a video e non il pannello interno?

    grazie a tutti!
    spero di essere stato il + chiaro possibile

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Non ho mai usato la classe PrinterJob, ma da quello che ho visto nella documentazione, credo che sia più logico che, ad implementare l'interfaccia Printable, sia il JScrollPane (o il suo contenuto o il pannello che lo contiene) e non l'intera finestra....

    Detto questo, dovresti passare il riferimento al pannello o al JScrollPane nel metodo setPrintable() e non this.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    setPrintable

    public abstract void setPrintable(Printable painter)

    Calls painter to render the pages. The pages in the document to be printed by this PrinterJob are rendered by the Printable object, painter. The PageFormat for each page is the default page format.

    Parameters:
    painter - the Printable that renders each page of the document.
    quindi non posso passargli il JPanel

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    E perchè no?
    Non puoi semplicemente costruire una classe che estende JPanel e implementa Printable e, di conseguenza, il metodo print()?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.