import java.awt.*; import java.awt.event.*; import java.awt.print.*; import javax.swing.*; import javax.swing.event.*; public class FilePrinter extends JFrame { public static void main(String[] args) { new FilePrinter(); } private PageFormat mPageFormat; private FilePageRenderer mPageRenderer; private String mTitle; public FilePrinter() { super("FilePrinter v1.0"); createUI(); PrinterJob pj = PrinterJob.getPrinterJob(); mPageFormat = pj.defaultPage(); setVisible(true); } protected void createUI() { setSize(350, 300); center(); Container content = getContentPane(); content.setLayout(new BorderLayout()); // Add the menu bar. JMenuBar mb = new JMenuBar(); JMenu file = new JMenu("File", true); file.add(new FileOpenAction()).setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_O, Event.CTRL_MASK)); file.add(new FilePrintAction()).setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK)); file.add(new FilePageSetupAction()).setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_P, Event.CTRL_MASK | Event.SHIFT_MASK)); file.addSeparator(); file.add(new FileQuitAction()).setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_Q, Event.CTRL_MASK)); mb.add(file); JMenu page = new JMenu("Page", true); page.add(new PageNextPageAction()).setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, 0)); page.add(new PagePreviousPageAction()).setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, 0)); mb.add(page); setJMenuBar(mb); // Add the contents of the window. getContentPane().setLayout(new BorderLayout()); // Exit the application when the window is closed. addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } protected void center() { Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension frameSize = getSize(); int x = (screenSize.width - frameSize.width) / 2; int y = (screenSize.height - frameSize.height) / 2; setLocation(x, y); } public void showTitle() { int currentPage = mPageRenderer.getCurrentPage() + 1; int numPages = mPageRenderer.getNumPages(); setTitle(mTitle + " - page " + currentPage + " of " + numPages); } public class FileOpenAction extends AbstractAction { public FileOpenAction() { super("Open..."); } public void actionPerformed(ActionEvent ae) { // Pop up a file dialog. JFileChooser fc = new JFileChooser("."); int result = fc.showOpenDialog(FilePrinter.this); if (result != 0) { return; } java.io.File f = fc.getSelectedFile(); if (f == null) { return; } // Load the specified file. try { mPageRenderer = new FilePageRenderer(f, mPageFormat); mTitle = "[" + f.getName() + "]"; showTitle(); JScrollPane jsp = new JScrollPane(mPageRenderer); getContentPane().removeAll(); getContentPane().add(jsp, BorderLayout.CENTER); validate(); } catch (java.io.IOException ioe) { System.out.println(ioe); } } } public class FilePrintAction extends AbstractAction { public FilePrintAction() { super("Print"); } public void actionPerformed(ActionEvent ae) { PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintable(mPageRenderer, mPageFormat); if (pj.printDialog()) { try { pj.print(); } catch (PrinterException e) { System.out.println(e); } } } } public class FilePageSetupAction extends AbstractAction { public FilePageSetupAction() { super("Page setup..."); } public void actionPerformed(ActionEvent ae) { PrinterJob pj = PrinterJob.getPrinterJob(); mPageFormat = pj.pageDialog(mPageFormat); if (mPageRenderer != null) { mPageRenderer.paginate(mPageFormat); showTitle(); } } } public class FileQuitAction extends AbstractAction { public FileQuitAction() { super("Quit"); } public void actionPerformed(ActionEvent ae) { System.exit(0); } } public class PageNextPageAction extends AbstractAction { public PageNextPageAction() { super("Next page"); } public void actionPerformed(ActionEvent ae) { if (mPageRenderer != null) mPageRenderer.nextPage(); showTitle(); } } public class PagePreviousPageAction extends AbstractAction { public PagePreviousPageAction() { super("Previous page"); } public void actionPerformed(ActionEvent ae) { if (mPageRenderer != null) mPageRenderer.previousPage(); showTitle(); } } }