Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Community > Forum De Bell Tolls
 
[JAVA]PrintPreview
Clicca QUI per vedere il messaggio nel forum
0m4r
c'è qualche buon anima che è in grado di aiutarmi a capire come utilizzare questa classse java?
Dovrebbe servire a visualizzare una PrintPreview di un elemento awt/Swing ma non la riesco ad usare...piu che altro non capisco come creare un oggetto di tipo Printable da poassare al costruttore dato che Printable è una classe astratta!

Scusate se lo allego ma è un po lunghino da postare...

questa è la fonte: http://www.spindoczine.com/sbe/

0m4r
nessuno ci capisce niente?

0m4r
up!

aesse
Se printable è una classe astratta potresti estenderla ridefinendone i metodi (come ridefinirli è il problema!)..così poi potresti passarla senza problemi al costruttore!
Il costruttore di printpreview accetta solo quella classe astratta o anche qualche interfaccia? (magari c'è qualche componente swing che la implementa.. e saresti a posto)

0m4r
grazie ell'aiuto...ma sono al punto di partenza! ;(

0m4r
ri-up...dai dai che ce la fate!

Rocco.Li
printable e' un interfaccia, quindi sulle classi che vuoi stampare devi implementare tale interfaccia (public MiaClasse implements Printable ...)

Molto probabilmente ti mancano molti pezzi del mosaico, ti conviene consultare una documentazione abbastanza completa di AWT (sito SUN o libri sull'argomento) visto che l'interfaccia menzionata fa parte di quest'ultimo.

puoi iniziare a consultare il capitolo 22 del libro scaricabile all'indirizzo menzionato. Qualche info in piu' la trovi.

Ciao.

Rocco

0m4r
riuppo, dato che nonostante sia passato un sacco di tempo ancoira non ho risolto il problema...qualcuno mi illumina?

dai raga, lo so che ce la possiamo fare.

Lord_Tom
http://java.sun.com/j2se/1.4.2/docs/api/java/awt/print/class-use/Printable.html
qui trovi gli usi di printable.
La documentazione e' raggiungibile da quella pagina!

Ryudo
devi implementare l'interfaccia Printable in ogni componente Swing che vuoi stampare e ridefinire il metodo print() all'interno di questi componenti.

Es.
PHP:

public class MyPrintablePanel extends   JPanel implements Printable {
    public int print(Graphics g, PageFormat pf, int pageIdx) throws PrinterException {
      // controlli se pageIdx esiste
      // crei e imposti il rettangolo da stampare
     // return Printable.PAGE_EXISTS oppure Printable.NO_SUCH_PAGE a seconda se pageIdx esiste o meno.
}



poi crei l'oggetto PrintPreview passandogli un new MyPrintablePanel().
Se cerchi qualche tutorial trovi il codice di print() gia' pronto, io ai tempi l'avevo scopiazzato da un articolo :D

0m4r
io non capisco cose devo metterci dentro print, l'ho scopiazzato anche io, ma non riesco a vededre nulla...è proprio questo il problema, l'implementazione di print.

Non è che mi faresti scopiazzare il tuo? ;P

Ryudo
Originally posted by 0m4r

Non è che mi faresti scopiazzare il tuo? ;P

l'ho usato a lavoro ma un annetto fa altrimenti te lo passavo, hai provato a vedere se c'e' qualcosa su javaworld.com ? Altrimenti posta il tuo print() e vediamo che c'e' dentro :)

0m4r
il mio print è un utante ormai....vedo se riesco a ritrovare l'originale piu significatico che ho usato...
thx dell'aiuto...

P.S.
andando un po ot, non è che sai in che modo ricavare una immagine da un oggetto AWT o Swing?

0m4r
questo, nel caso perticolare servirebbe per una tabella, se funzionasse...

code:
public int print(Graphics g, PageFormat pageFormat, int pageIndex) { Graphics2D g2 = (Graphics2D) g; g2.setColor(Color.black); int fontHeight=g2.getFontMetrics().getHeight(); int fontDesent=g2.getFontMetrics().getDescent(); //leave room for page number double pageHeight = pageFormat.getImageableHeight()-fontHeight; double pageWidth = pageFormat.getImageableWidth(); double tableWidth = (double) getColumnModel().getTotalColumnWidth(); double scale = 1; if (tableWidth >= pageWidth) { scale = pageWidth / tableWidth; } double headerHeightOnPage=getTableHeader().getHeight()*scale; double tableWidthOnPage=tableWidth*scale; double oneRowHeight=(getRowHeight()+getRowMargin())*scale ; int numRowsOnAPage=(int)((pageHeight-headerHeightOnPage)/oneRowHeight); double pageHeightForTable=oneRowHeight*numRowsOnAPage; int totalNumPages=(int)Math.ceil(((double)getRowCount())/numRowsOnAPage); if(pageIndex>=totalNumPages) { return NO_SUCH_PAGE; } g2.translate(pageFormat.getImageableX(),pageFormat.getImageableY()); //bottom center g2.drawString("Page: "+(pageIndex+1),(int)pageWidth/2-35, (int)(pageHeight+fontHeight-fontDesent)); g2.translate(0f,headerHeightOnPage); g2.translate(0f,-pageIndex*pageHeightForTable); //If this piece of the table is smaller //than the size available, //clip to the appropriate bounds. if (pageIndex + 1 == totalNumPages) { int lastRowPrinted = numRowsOnAPage * pageIndex; int numRowsLeft = getRowCount() - lastRowPrinted; g2.setClip(0,(int)(pageHeightForTable * pageIndex),(int) Math.ceil(tableWidthOnPage),(int) Math.ceil(oneRowHeight * numRowsLeft)); } //else clip to the entire area available. else{ g2.setClip(0, (int)(pageHeightForTable*pageIndex), (int) Math.ceil(tableWidthOnPage), (int) Math.ceil(pageHeightForTable)); } g2.scale(scale,scale); paint(g2); g2.scale(1/scale,1/scale); g2.translate(0f,pageIndex*pageHeightForTable); g2.translate(0f, -headerHeightOnPage); g2.setClip(0, 0, (int) Math.ceil(tableWidthOnPage), (int)Math.ceil(headerHeightOnPage)); g2.scale(scale,scale); getTableHeader().paint(g2); //paint header at top return Printable.PAGE_EXISTS; }

Ryudo
Originally posted by 0m4r

andando un po ot, non è che sai in che modo ricavare una immagine da un oggetto AWT o Swing?

intendi dire che vuoi ottenre un' immagine del componente stesso ? francamente non ne ho idea pero' e' interessante magari quando ho tempo vedo se trovo qualcosa :D

0m4r
Originally posted by Ryudo
intendi dire che vuoi ottenre un' immagine del componente stesso ? francamente non ne ho idea pero' e' interessante magari quando ho tempo vedo se trovo qualcosa :D


intendo proprio questo...cosa ne dici del "mio" print()?

Ryudo
Originally posted by 0m4r
intendo proprio questo...cosa ne dici del "mio" print()?

adesso gli do' un'occhiata, e' un po' lunghetto ;)
A prima vista mi pare manca il draw finale no ?

0m4r
ehm...bho, se lo sapessi lo correggessi no? ;P

0m4r
up, Ryudo...up! ;P

Ryudo
Originally posted by 0m4r
up, Ryudo...up! ;P

hai ragione 0m4r scusa se ti ho abbandonato ma sono preso dal lavoro e dopodomani ho il compitino di Istituzioni...nel frattempo hai provato con un esempio piu' semplice ?
Nel frattempo prima del return prova a definire l'area stampabile creando un Rectangle2D e a disegnarlo con g2.draw(rettangolo).

0m4r
grazie del suggerimento, ho provato anche con esempi piu semplici ma il risulatoto èè sempre stato un foglio bianco...bho...

dai, quando hai tempo cmq vediamoa se riusciamo a farlo funzionare!

Ryudo
ho scritto un piccolo esempio che crea un'immagine del componente e la stampa usando il printpreview, ho usato un textarea non una tabella per semplificare e perche' le tabelle sono veramente pallose :D C'e' qualche imprecisione perche' traslando il graphic il testo mi viene troncato, i possibili motivi li ho scritti nei commenti.
Il codice e' qui

Dimenticavo una cosa importante, ho provato solo a stampare su file !

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate