Newsgroup: it.comp.java
Titolo: Un problema irrisolto: la stampa.

Considerando la creazione di una applicazione Java (e non di un applet) c'è
un modo per gestire la stampa (su carta, per essere esasperatamente
preciso)?
Sul mio libro tale possibilità non è nemmeno contemplata.
Si può fare?
Grazie tante,
          Enoch.

...

Puoi  utilizzare la funzione getPrintJob della classe Toolkit per ricavare un
oggetto di tipo PrintJob (questo comporta _sempre_ la visualizzazione del dialog
di stampa) e poi ricavare da esso un oggetto Graphics; in questo modo puoi
gestire la pagina stampata con le stesse funzioni che utilizzi per il video
(esattamente come succede con le API di Windows).
---
Valter Minute
min...@fortech.it
 (the reply address of this message is invalid)
---
Are you looking for a good freeware ScreenSaver? Try FOYD!
http://hotfiles.zdnet.com/cgi-bin/texis/swlib/hotfiles/getit.bin?fcode=000PZ0
if you want, I can send you the (free) C++ source code.

Valter Minute
Non ho ben capito che cosa intendi.
Comunque il mio problema è questo: sulla videata ho un'area di testo e un
pannello scorrevole. Quando ne richiedo la stampa quello che ottengo è solo
la porzione di testo visibile. Io vorrei invece poter stampare tutto il
testo "contenuto" nell'area di testo e tutto quello presente nel pannello.
Questo si può fare?
Grazie,
          Enoch.


Non è possibile farlo in modo "automatico", non esiste una funzione che prenda
il testo di un componente e lo stampi direttamente;
Se intendi gestire la stampa all'interno della tua applicazione tutto quello che
puoi fare è ricavare un oggetto Graphics che faccia riferimento alla stampante
(con il sistema che ti ho descritto nel messaggio precedente) e disegnare il tuo
testo (riga per riga), con le stesse modalità con cui lo disegneresti sul video
(g.drawString(...)).
Se vuoi evitare di gestire la stampa a basso livello, ti consiglio di utilizzare
un tool di report (soprattutto se i dati da stampare provengono da un database)
o una libreria "già pronta" che disponga di funzionalità più avanzate rispetto a
quelle della classe Graphics.
Puoi provare su 
www.developer.com
 nelle directory dedicate a Java.



Grazie per l'aiuto, il problema di stampare le componenti l'ho risolto. Il
nuovo problema che si è presentato è quello per cui un testo molto lungo
viene irrimediabilmente tagliato alla prima pagina. Come faccio a stampare
le eventuali altre? (c'è qualche paramentro che devo specificare in
getPrintJob?).
Ancora grazie,
          Enoch.


Per inviare una pagina alla stampante devi richiamare la member function
dispose() dell'oggetto graphics che ti è stato ritornato da
PrintJob.getGraphics().
Richiamando ancora PrintJob.getGraphics() otterrai un "graphics context"
relativo a una nuova pagina.


Su:
http://java.sun.com/products/jdk/1.2/docs/guide/awt/designspec/printing.html
puoi trovare una spiegazione abbastanza esaustiva di come viene gestita la
stampa da AWT.
Probabilmente il nuovo JDK 1.2 conterrà funzioni più flessibili per impostare il
formato di stampa (e leggere le impostazioni della stampante) e stampare
documenti multipagina.



Poichč non sono stato in grado di mettere in pratica il tuo consiglio
(utilizzando questo codice
  void stampaOggetto ()
  {
       Properties prop = new Properties();
       PrintJob job = getToolkit.getPrintJob(padre, "Stampa frame", prop);
       Graphics pg;
        int i = 0;
      if (job != null)
      {
        do {
           pg = job.getGraphics();
           if (pg != null)
           {
               padre.printAll(pg);
               pg.dispose();
            }
          } while (i < 2);
            job.end();
       }
   }
sono riuscito solo a stampare piů volte la stessa pagina ma non il resto del
documento), vorrei chiederti la gentilezza di indicarmi esplicitamente le
modifiche da apportare a questo codice per ottenere il risultato desiderato.
Ti ringrazio,
          Enoch.

           Enoch.
  Scusami ma dov'e' l'incremento della variabile i .???