package components; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.awt.print.Book; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.text.MessageFormat; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.swing.AbstractAction; import javax.swing.Box; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.ScrollPaneConstants; public class Imprimante extends JFrame { private Box panneau = Box.createVerticalBox(); private JScrollPane ascenceur = new JScrollPane(panneau, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); private JToolBar barre = new JToolBar(); private Book pages = new Book(); private PrintRequestAttributeSet attributs = new HashPrintRequestAttributeSet(); private PrinterJob travail = PrinterJob.getPrinterJob(); private PageFormat page = travail.getPageFormat(attributs); private Aperçu boîte; private JTable table; public Imprimante(){ super("Photos"); table = new JTable(new components.MyTableModel()); table.setPreferredScrollableViewportSize(new Dimension(500, 70)); table.setFillsViewportHeight(true); MessageFormat header = new MessageFormat("Page {0,number,integer}"); MessageFormat footer = new MessageFormat("Thales{0,number,integer}"); Printable printable = table.getPrintable(JTable.PrintMode.NORMAL, header, footer); pages.append(printable, page,computeNbPages()); //Create the scroll pane and add the table to it. panneau.add(table); //Add the scroll pane to this panel. add(ascenceur); add(barre, BorderLayout.NORTH); barre.add(new AbstractAction("Aperçu avant impression") { public void actionPerformed(ActionEvent e) { if (boîte==null) boîte = new Aperçu(); boîte.setVisible(true); } }); barre.add(new AbstractAction("Imprimer") { public void actionPerformed(ActionEvent e) { try { travail.setPageable(pages); if (travail.printDialog(attributs)) { travail.print(attributs); } } catch (PrinterException ex) { JOptionPane.showMessageDialog(Imprimante.this, ex); } } }); setSize(400, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); } private int computeNbPages() { float height = 0; for (int index = 0; index < table.getModel().getRowCount(); index++) { height += table.getRowHeight(index); } int nbPages = 1; if (height > page.getImageableHeight()) { nbPages = (int) ((height / page.getImageableHeight())+1); } System.out.println("page.getImageableHeight()= "+page.getImageableHeight()); System.out.println("rowCount= "+table.getModel().getRowCount()); System.out.println("height= "+height); System.out.println("nbPages= "+nbPages); //8 pages return nbPages; } public static void main(String[] args) { new Imprimante(); } private class Aperçu extends JDialog { private int pageCourante = 0; private Panneau panneau = new Panneau(); private JToolBar barre = new JToolBar(); private String libellé = "Page {0}/{1}"; private JTextField numéro = new JTextField(MessageFormat.format(libellé, pageCourante+1, pages.getNumberOfPages())); public Aperçu() { super(Imprimante.this, "Aperçu avant impression"); add(panneau); barre.setFloatable(false); barre.add(new AbstractAction("Précédente") { public void actionPerformed(ActionEvent e) { if (pageCourante>0) { pageCourante--; numéro.setText(MessageFormat.format(libellé, pageCourante+1, pages.getNumberOfPages())); repaint(); } } }); barre.add(new AbstractAction("Suivante") { public void actionPerformed(ActionEvent e) { if (pageCourante