Torna indietro   Hardware Upgrade Forum > Software > Programmazione

FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7
FRITZ!Repeater 1700 porta il Wi-Fi 7 dual-band nelle case connesse. Mette a disposizione fino a 2.880 Mbit/s su 5 GHz e 688 Mbit/s su 2,4 GHz, integrazione Mesh immediata via WPS con FRITZ!Box e funzioni smart come MLO per bassa latenza. Compatto, plug-and-play e pronto per il futuro, è la soluzione ideale per chi vuole coprire ogni angolo senza cavi o complicazioni
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica
La Fondazione Chips-IT ha presentato a Pavia il piano strategico 2026-2028 per rafforzare l'ecosistema italiano dei semiconduttori. Con un focus su ricerca, design, talenti e infrastrutture, la Fondazione punta a consolidare il ruolo dell'Italia nel Chips Act europeo, sostenendo innovazione, collaborazione industriale e sovranità tecnologica.
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud
Al Museo Alfa Romeo di Arese, Nutanix ha riunito clienti, partner ed esperti per .Next On Tour Italia e per mostrare come l’infrastruttura hybrid multicloud possa diventare il fondamento dell’innovazione, con una piattaforma capace di unificare applicazioni tradizionali, moderne architetture cloud-native e nuovi scenari basati sull’intelligenza artificiale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-04-2008, 09: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, 09:33   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 10: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, 11:11   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 11: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, 11: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 11:43.
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 13:24   #7
andbin
Senior Member
 
L'Avatar di andbin
 
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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 13: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, 13:58   #9
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 14: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, 15: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, 15:49   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 15: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 15:58.
PaVi90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 16:38   #14
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2008, 17: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, 18: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, 18: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, 19: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, 19: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, 09: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


FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
Fondazione Chips-IT, l'Italia alla riscossa nei chip. Il piano e la partnership EssilorLuxottica Fondazione Chips-IT, l'Italia alla riscossa nei ...
Nutanix: innovazione, semplicità e IA al centro della strategia hybrid multicloud Nutanix: innovazione, semplicità e IA al ...
Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il notebook gaming 'budget' che non ti aspetti Lenovo LOQ 15i Gen 10 (15IRX10) alla prova: il n...
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Il futuro dei chip è verticale: R...
Accenture e Anthropic insieme per aiutar...
Fino a 360 GB su un vetro grande come un...
tado° porta il bilanciamento idrauli...
Metallo liquido o solido? Entrambi, cont...
iPhone 17 Pro Max in offerta su Amazon: ...
A Taranto divieto di bici, e-bike e mono...
Scopa elettrica lava e aspira come una t...
SumUp continua a crescere ed espande l'o...
Volkswagen ID.Polo: da 25.000 euro, in q...
iPhone Fold: le ultime indiscrezioni sug...
Audi Revolut F1 Team: annunciati nome e ...
Resident Evil - Code Veronica Remake: l'...
Occhio ai prezzi dei robot ECOVACS Deebo...
IQM investe 40 milioni di euro per espan...
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: 19:35.


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