import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class PrinterSettingUpDialogPrint extends JFrame {
DrawingCanvas canvas= new DrawingCanvas();
JButton setUpButton= new JButton("Page Setup"), printButton= new JButton("Print"), cancelButton= new JButton("Cancel");
PrinterJob printJob = PrinterJob.getPrinterJob();
PageFormat pageFormat = printJob.defaultPage();
PrintableCanvas printableCanvas;
public PrinterSettingUpDialogPrint() {
getContentPane().add(canvas);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1, 3));
setUpButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent a){
setup();
}
});
panel.add(setUpButton);
printButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent a){
print();
}
});
panel.add(printButton);
cancelButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent a){
cancel();
}
});
panel.add(cancelButton);
getContentPane().add(BorderLayout.SOUTH, panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 275);
setVisible(true);
}
private void setup() {
pageFormat = printJob.pageDialog(pageFormat);
printJob.validatePage(pageFormat);
}
private void print() {
printableCanvas = new PrintableCanvas(pageFormat);
printJob.setPrintable(printableCanvas);
boolean ok = printJob.printDialog();
if (ok) {
try {
printJob.print();
} catch (Exception pe) {
System.out.println("Printing Exception Occured!");
pe.printStackTrace();
}
}
}
private void cancel() {
printJob.cancel();
}
public static void main(String arg[]) {
new PrinterSettingUpDialogPrint();
}
}
class DrawingCanvas extends JPanel {
Font font = new Font("Dialog", Font.BOLD, 50);
FontMetrics fontMetrics;
int w = 400, h = 275;
DrawingCanvas() {
setBackground(Color.white);
setSize(400, 275);
fontMetrics = getFontMetrics(font);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
paintContent(g2D, w, h);
}
public void paintContent(Graphics2D g2D, int w, int h) {
g2D.setFont(font);
g2D.drawString("Java 2D", (float) (0.5 * (w - fontMetrics
.stringWidth("Java 2D"))), (float) (0.5 * h - 1.25 * fontMetrics
.getHeight()));
}
}
class PrintableCanvas implements Printable {
DrawingCanvas canvas;
PageFormat pageFormat;
public PrintableCanvas(PageFormat pf) {
pageFormat = pf;
}
public int print(Graphics g, PageFormat pageFormat, int pageIndex)
throws PrinterException {
if (pageIndex >= 1) {
return Printable.NO_SUCH_PAGE;
}
Graphics2D g2D = (Graphics2D) g;
canvas = new DrawingCanvas();
canvas.paintContent(g2D, (int) pageFormat.getImageableWidth(),
(int) pageFormat.getImageableHeight());
return Printable.PAGE_EXISTS;
}
}