Torna indietro   Hardware Upgrade Forum > Software > Programmazione

realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-04-2008, 08:18   #1
PaVi90
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
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 08:33   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
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.
Una soluzione è usare le Printing API di Java SE, vedi <qui>.
Un'altra è usare tools/librerie apposite (e più complesse) per la gestione dei report, una è JasperReports.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 09:29   #3
PaVi90
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
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 10:11   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Ma non ci ho capito niente
Nemmeno l'esempio minimale/basilare/stupido HelloWorldPrinter.java del tutorial??
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 10:22   #5
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Quote:
Originariamente inviato da andbin Guarda i messaggi
Nemmeno l'esempio minimale/basilare/stupido HelloWorldPrinter.java del tutorial??
Uhm ora provo... ma non ti assicuro niente
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 10:29   #6
PaVi90
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);
    }
}
Potresti aiutarmi a capire il resto del codice, quello senza commenti? Thanks


Cmq grazie di tutto!

Ultima modifica di PaVi90 : 14-04-2008 alle 10:43.
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 12:24   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 12:42   #8
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Non ho capito quasi nulla
E se volessi stampare semplicemente una stringa?!
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 12:58   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Non ho capito quasi nulla
E se volessi stampare semplicemente una stringa?!
Ma .... è proprio quello che fa l'esempio!!! Stampa "Hello world!" sull'unica pagina stampata.

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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 13:00   #10
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Quote:
Originariamente inviato da andbin Guarda i messaggi
Ma .... è proprio quello che fa l'esempio!!! Stampa "Hello world!" sull'unica pagina stampata.

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ì.
Ora mi è un po' più chiaro
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 14:38   #11
PaVi90
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
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 14:49   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Non ci ho capito ancora quasi niente
Ho letto venti volte il tuo post ma nulla
Sarà che mi mancano le basi
Scusa ma .. cosa non ti è chiaro in particolare?

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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 14:55   #13
PaVi90
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 14:58.
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 15:38   #14
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Aspetta aspetta... cosa vuol dire <<dai al PrinterJob (con setPrintable()) un oggetto che implementa Printable.>> ??
Mi sono già perso
Nell'esempio fa: job.setPrintable(this);
Viene passato al PrinterJob ('job') tramite setPrintable() un reference ('this') che fa riferimento alla istanza di HelloWorldPrinter (che appunto implementa Printable).

Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
Ma non c'è un tutorial a livello di "asilo nido"??
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, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 16:24   #15
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi
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...
Conosci il funzionamento e lo scopo di un' interfaccia?
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 17:17   #16
PaVi90
Bannato
 
Iscritto dal: May 2007
Città: Vivo in un mondo in cui tutti ti accusano e ti additano per un nonulla...
Messaggi: 9995
Quote:
Originariamente inviato da andbin Guarda i messaggi
Nell'esempio fa: job.setPrintable(this);
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 ...

Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Conosci il funzionamento e lo scopo di un' interfaccia?
Parli degli eventi asincroni e quella roba lì?
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 17:31   #17
khelidan1980
Senior Member
 
L'Avatar di khelidan1980
 
Iscritto dal: Mar 2005
Città: Morimondo city
Messaggi: 5491
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi


Parli degli eventi asincroni e quella roba lì?
mi sa che ti devi rivedere le interfacce!
__________________
Khelidan
khelidan1980 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 18:13   #18
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da PaVi90 Guarda i messaggi


Parli degli eventi asincroni e quella roba lì?
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){}
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 18:52   #19
PaVi90
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
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2008, 08:07   #20
franksisca
Senior Member
 
L'Avatar di franksisca
 
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
franksisca è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Ma Anthropic non doveva rallentare? Lanc...
La NASA conferma che due astronauti ital...
Rockstar introduce regole stringenti per...
Big Fish, in Sicilia il più grand...
Dongfeng mostra la piattaforma T1 in Eur...
Centinaia di vittime per aver scaricato ...
File di Excel illeggibili su LibreOffice...
Grok 4.7 raddoppia la velocità e dimezza...
Sembra uscito da Halo ma è un cas...
Fable 2 su PC a 60 FPS: il port non uffi...
Amazfit T-Rex Dual Solar: ecco il nuovo ...
Fermati 45 maxi-progetti IA negli USA. T...
Niente datacenter a Turbigo: il sindaco ...
OPPO Creator Academy, al via il progetto...
Un annuncio di lavoro, un file da scaric...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:15.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v