|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
[JAVA] Come stampare ???
Ciao a tutti,
avrei necessità di stampare (non a video, ma con la stampante connessa al pc da cui il programma viene eseguito) un array dinamico di record (con due campi: nome prodotto e prezzo), ed in più aggiungere una intestazione sulla pagina stampata. Vorrei realizzare, insomma, una specie di scontrino. Ho cercato con google ma ho trovato solo un paio di risultati, ma di difficile comprensione Chi sa darmi qualche dritta, magari facile facile? Thanks |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Un'altra è usare tools/librerie apposite (e più complesse) per la gestione dei report, una è JasperReports.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Grazie
Ma non ci ho capito niente |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Nemmeno l'esempio minimale/basilare/stupido HelloWorldPrinter.java del tutorial??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#5 | |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Quote:
|
|
|
|
|
|
|
#6 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Ho riportato l'esempio copincollandolo (
) e funge Ma non capisco come accidenti fa a funzionare, le classi a cosa servono, i vari metodi, i cosi grafici... Il codice copincollato è questo, a cui ho aggiunto i commenti solo alle righe di codice che sono riuscito a comprendere; i commenti in inglese, invece, sono quelli che già c'erano all'origine: Codice:
package helloworldprinter;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.print.*;
public class HelloWorldPrinter implements Printable, ActionListener {
public int print(Graphics g, PageFormat pf, int page) throws PrinterException {
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
/* User (0,0) is typically outside the imageable area, so we must
* translate by the X and Y values in the PageFormat to avoid clipping
*/
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
/* Now we perform our rendering */
// Ciò che stampa, con i margini dall'angolo della pagina:
g.drawString("Hello world!", 100, 100);
/* tell the caller that this page is part of the printed document */
return PAGE_EXISTS;
}
public void actionPerformed(ActionEvent e) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(this);
boolean ok = job.printDialog();
if (ok) {
try {
job.print();
} catch (PrinterException ex) {
/* The job did not successfully complete */
}
}
}
public static void main(String args[]) {
//UIManager.put("swing.boldMetal", Boolean.FALSE);
// Dichiarazione del frame con intestazione:
JFrame f = new JFrame("Hello World Printer");
// Oggetto ascoltatore per la chiusura del frame:
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
// Dichiarazione pulsante con la scritta <<Print Hello World>>:
JButton printButton = new JButton("Print Hello World");
// ???
printButton.addActionListener(new HelloWorldPrinter());
// Aggiunge al centro del frame il pulsante printButton:
f.add("Center", printButton);
// Resize del frame in modo da contenere in modo ottimale il pulsante:
f.pack();
// Rende visibile il frame:
f.setVisible(true);
}
}
![]() Cmq grazie di tutto! Ultima modifica di PaVi90 : 14-04-2008 alle 11:43. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quell'esempio è sì abbastanza semplice ma ci sono delle cose da comprendere bene.
Nel main() viene creato un JFrame in cui viene messo un pulsante. Al pulsante viene aggiunto un ActionListener che è una istanza di HelloWorldPrinter (che appunto implementa ActionListener). Fino a qui si tratta di un normale e semplice uso di Swing. Quando viene premuto il pulsante, viene invocato actionPerformed(). Qui inizia la parte da capire bene. PrinterJob.getPrinterJob() serve per ottenere una istanza di PrinterJob, che è la classe principale che controlla la stampa. Inizialmente è associato al PrinterJob la stampante di default, quella predefinita. setPrintable() serve per indicare quale è l'oggetto "stampabile". Qui viene usata una interfaccia. Alla Printing API interessa solamente sapere quale è l'oggetto che implementa l'interfaccia Printable che quindi implementa il metodo print(blabla....). È la Printing API che "chiede" all'oggetto Printable di stampare la/e pagina/e invocando di volta in volta il metodo print(). printDialog() presenta la classica finestra di selezione delle stampanti. Scegli la stampante e premi OK. Se il ritorno è true, allora hai selezionato una stampante, quindi a quel punto si invoca print(). La Printing API invoca print() di Printable in sequenza per ogni pagina (le pagine partono da 0) fino a quando print() non ritorna NO_SUCH_PAGE. All'interno di print() hai il Graphics, hai le informazioni sul formato (PageFormat) e il numero di pagina. Quindi puoi stampare quello che vuoi sulla pagina. L'unica nota: per default l'unità di misura è in 72esimi di pollice. Si possono naturalmente fare traslazioni, scalamenti o altro sul Graphics.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#8 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
E se volessi stampare semplicemente una stringa?! |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Comunque tutto il nocciolo della questione è l'interfaccia Printable. Alla Printing API non interessa sapere dove è, cosa è o cosa fa l'oggetto Printable. Interessa solo sapere che appunto è-un Printable e quindi implementa certamente il metodo print(....). Quando c'è bisogno di stampare la Printing API invoca il metodo print(), come se dicesse: "senti Printable, stampa la pagina 0". Se la pagina 0 esiste, tu disegni sul Graphics e ritorni PAGE_EXISTS. Poi la Printing API continua: "senti Printable, stampa la pagina 1". Se come nell'esempio la pagina 1 (la seconda) non c'è, allora fai ritornare NO_SUCH_PAGE e finisce tutto lì.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#10 | |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Quote:
|
|
|
|
|
|
|
#11 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Non ci ho capito ancora quasi niente
![]() Ho letto venti volte il tuo post ma nulla ![]() Sarà che mi mancano le basi
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Tu "dai" al PrinterJob (con setPrintable()) un oggetto che implementa Printable. Quando sarà necessario stampare, verrà invocato di volta in volta il metodo print() sul tuo oggetto. Questo perché ovviamente sei tu che hai implementato il Printable che "sai" cosa/come stampare la pagina e inoltre quante pagine ci sono. La Printing API si limita solo ad invocare print() ... "ehi Printable ... senti, stampa la pagina X". Come concetto non mi sembra difficile.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Aspetta aspetta... cosa vuol dire <<dai al PrinterJob (con setPrintable()) un oggetto che implementa Printable.>> ??
Mi sono già perso ![]() Ma non c'è un tutorial a livello di "asilo nido"?? Ho difficoltà a stare dietro al discorso... Ultima modifica di PaVi90 : 14-04-2008 alle 15:58. |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Viene passato al PrinterJob ('job') tramite setPrintable() un reference ('this') che fa riferimento alla istanza di HelloWorldPrinter (che appunto implementa Printable). Roba del tipo "Il manuale Java delle Giovani Marmotte" o "Primi passi in Java da 0 a 6 anni"??? No, non mi risulta. Scusa la battuta eh ...
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Conosci il funzionamento e lo scopo di un' interfaccia?
|
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Quote:
Parli degli eventi asincroni e quella roba lì? |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
|
mi sa che ti devi rivedere le interfacce!
__________________
Khelidan |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Un' interfaccia è un contratto.....ovvero stabilisce che l'oggetto che la implementa esporterà delle funzionalità sotto forma di metodi stabilita a priori dall' interfaccia.Ad esempio l' interfaccia Comparable ha un unico metodo
public int compareTo(Object o) oppure public int compareTo(MiaClasse mc) con l' utilizzo dei generici! In sostanza avrai qualcosa del genere public MiaClasse implements Comparable{ public int compareTo(Object o){ return 0;// esempio da non seguire ma che serve ad indicare il fatto che l' interfaccia garantisce che il metodo sia implementato, non che sia correttamente funzionale! } } Implementare un ' interfaccia ti consente un assegnamento del tipo Compareble c=new MiaClasse(); ed ovviamente di passare un oggetto che implementa l' interfaccia ad un metodo con questa firma public void metodo(Comparable c){} |
|
|
|
|
|
#19 |
|
Bannato
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
|
Uhm... non ho capito moltissimo ma qualcosa ho capito
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
scusa se mi intrometto....ma conosci java???
cosa hai fatto fino ad ora, perchè a me sembra che ti manchino le basi....
__________________
My gaming placement |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:35.























