 | |
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 |
[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? |
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. |
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 |
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 ! |
|
|
|
|