/* Class : PrintTextArea * Questa classe permette di provare il funzionamento della gestione della stampa del testo di una JTextArea * in Java con possibilità di settarne le impostazioni */ import java.awt.*; import java.awt.print.*; import javax.print.attribute.*; // per la stampa // per scegliere le impostazioni di stampa import java.awt.event.*; import javax.swing.*; public class PrintTextArea implements Printable, ActionListener { protected protected protected protected JFrame JScrollPane JButton JTextArea f; pan; but_stampa; txa_input; // Bottone per la stampa in posizione sud // TextArea di input public PrintTextArea(){ crea_interfaccia(); }// fine costruttore // costruttore private final void crea_interfaccia(){ // creazione dell'interfaccia grafica f = new JFrame("Stampa di una TextArea"); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); txa_input = new JTextArea(50, 20); int Max= 43; // unica pagina for (int i=1;i<=Max;i++) { txa_input.append("Line " + i + "\n"); } pan = new JScrollPane(txa_input); pan.setPreferredSize(new Dimension(250,200)); f.add("Center", pan); but_stampa = new JButton("Print"); but_stampa.addActionListener(this); f.add("South", but_stampa); f.pack(); f.setVisible(true); } // fine crea_interfaccia() public int print(Graphics g, PageFormat pf, int page) throws PrinterException { if (page > 0) return NO_SUCH_PAGE; Graphics2D g2d = (Graphics2D)g; g2d.translate(pf.getImageableX(), pf.getImageableY()); txa_input.print(g); return PAGE_EXISTS; }// fine metodo dell’interfaccia Printable // stampa del contenuto del TextArea // con corretta gestione dell’ “a capo” private void gestisci_stampa(){ PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(this); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); boolean ok = job.printDialog(aset); if(ok) { try { job.print(aset); } catch (PrinterException ex) { } } } // fine gestisci_stampa() public void actionPerformed(ActionEvent e){ gestisci_stampa(); } // fine actionPerformed() public static void main(String[] str){ new PrintTextArea(); }// fine main }// fine classe nb: per scegliere L&F try { String cn = UIManager.getSystemLookAndFeelClassName(); UIManager.setLookAndFeel(cn); // L&F nativo } catch (Exception cnf) {}