package utility.printing; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Event; import java.awt.LayoutManager; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.print.PageFormat; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import javax.swing.AbstractAction; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.table.JTableHeader; /** * * @author Konrad Borowiecki */ public class ContainerPrinter extends JFrame { private static final long serialVersionUID = 1L; private Container container; private PageFormat pageFormat; private ContainerPageRenderer pageRenderer; private String title; public ContainerPrinter(Container c) { super(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.container = c; PrinterJob pj = PrinterJob.getPrinterJob(); pageFormat = pj.defaultPage(); pageRenderer = new ContainerPageRenderer(container, pageFormat); pageRenderer.initPages(); title = "[" + container.getName() + "]"; showTitle(); JScrollPane jsp = new JScrollPane(pageRenderer); jsp.setPreferredSize(new Dimension(200, 300)); JPanel contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); contentPane.setBackground(Color.BLUE); contentPane.add(jsp, BorderLayout.CENTER); setContentPane(contentPane); // Add the menu bar. JMenuBar mb = new JMenuBar(); JMenu file = new JMenu("File", true); 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); } public ContainerPageRenderer getPageRenderer() { return pageRenderer; } 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() { if(pageRenderer != null) { int currentPage = pageRenderer.getCurrentPage() + 1; int numPages = pageRenderer.getNumPages(); setTitle(title + " - page " + currentPage + " of " + numPages); } } public class FilePrintAction extends AbstractAction { private static final long serialVersionUID = 1L; public FilePrintAction() { super("Print"); } @Override public void actionPerformed(ActionEvent ae) { PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintable(pageRenderer, pageFormat); if(pj.printDialog()) try { pj.print(); }catch(PrinterException e) { System.out.println(e); } } } public class FilePageSetupAction extends AbstractAction { private static final long serialVersionUID = 1L; public FilePageSetupAction() { super("Page setup..."); } @Override public void actionPerformed(ActionEvent ae) { PrinterJob pj = PrinterJob.getPrinterJob(); pageFormat = pj.pageDialog(pageFormat); if(pageRenderer != null) { pageRenderer.initPages(pageFormat); showTitle(); } } } public class FileQuitAction extends AbstractAction { private static final long serialVersionUID = 1L; public FileQuitAction() { super("Quit"); } @Override public void actionPerformed(ActionEvent ae) { System.exit(0); } } public class PageNextPageAction extends AbstractAction { private static final long serialVersionUID = 1L; public PageNextPageAction() { super("Next page"); } @Override public void actionPerformed(ActionEvent ae) { if(pageRenderer != null) pageRenderer.nextPage(); showTitle(); repaint(); } } public class PagePreviousPageAction extends AbstractAction { private static final long serialVersionUID = 1L; public PagePreviousPageAction() { super("Previous page"); } @Override public void actionPerformed(ActionEvent ae) { if(pageRenderer != null) pageRenderer.previousPage(); showTitle(); repaint(); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JPanel p = new JPanel(); LayoutManager pLayout = new BoxLayout(p, BoxLayout.Y_AXIS); p.setLayout(pLayout); JButton aB = new JButton("ButtonA"); aB.setName("aB"); p.add(aB); JButton bB = new JButton("ButtonB"); bB.setName("bB"); p.add(bB); JLabel aL = new JLabel("LabelA"); aL.setName("aL"); p.add(aL); JPanel aPanel = new JPanel(); JLabel bL = new JLabel("LabelB"); bL.setName("bL"); aPanel.add(bL); JComboBox aCB = new JComboBox(); aCB.setName("aCB"); aPanel.add(aCB); p.add(aPanel); JPanel bPanel = new JPanel(); JPanel aBPanel = new JPanel(); LayoutManager aBPanelLayout = new BoxLayout(aBPanel, BoxLayout.Y_AXIS); aBPanel.setLayout(aBPanelLayout); JLabel bPanelL = new JLabel("bPanel Label1"); bPanelL.setName("bPanelL"); aBPanel.add(bPanelL); JRadioButton bPanelRB = new JRadioButton("bPanel RadioButton1"); bPanelRB.setName("bPanelRB"); aBPanel.add(bPanelRB); bPanel.add(aBPanel); JButton bPanelB = new JButton("bPanelB Button1"); bPanelB.setName("bPanelB"); bPanel.add(bPanelB); JButton bBPanelB = new JButton("bBPanelB"); bBPanelB.setName("bBPanelB"); bBPanelB.setPreferredSize(new Dimension(100, 55)); bBPanelB.setBackground(Color.RED); JLabel bBPanelL2 = new JLabel("bBPanelL2"); bBPanelL2.setName("bBPanelL2"); bBPanelL2.setOpaque(true); bBPanelL2.setBackground(Color.YELLOW); JPanel bBPanel = new JPanel(); LayoutManager bBPanelLayout = new BorderLayout(); bBPanel.setLayout(bBPanelLayout); bBPanel.add(bBPanelB, BorderLayout.NORTH); bBPanel.add(bBPanelL2, BorderLayout.SOUTH); bBPanel.setBackground(Color.BLUE); bPanel.add(bBPanel); p.add(bPanel); int rows = 200; int columns = 5; Object[][] data = new Object[rows][columns]; for(int i = 0; i < rows; i++) { for(int j = 0; j < columns; j++) { data[i][j] = "i=" + i + "; j=" + j; } } Object[] colNames = { "A", "B", "C" }; JTable table = new JTable(data, colNames); table.setName("table"); JTableHeader th = table.getTableHeader(); th.setName("tableHeader"); p.add(th); p.add(table); JPanel contentPane = new JPanel(); contentPane.add(p); contentPane.setBackground(Color.BLUE); JFrame f = new JFrame(); f.setContentPane(contentPane); int fH = 300; f.setSize(600, fH); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); ContainerPrinter cp = new ContainerPrinter(p); cp.getPageRenderer().setHeader("HEADER"); cp.getPageRenderer().setIsPrintOutCenteredOnPageWidth(true); cp.getPageRenderer().initPages(); cp.setSize(400, 400); // cp.center(); // Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); // Dimension frameSize = cp.getSize(); int x = 0;//(screenSize.width - frameSize.width) / 2; int y = fH;//(screenSize.height - frameSize.height) / 2; cp.setLocation(x, y); cp.setVisible(true); } }); } }