package javacodebook.media.print.graphic;

import java.awt.*;
import java.awt.print.*;
import java.io.*;
import javax.swing.*;

/**
 * Diese Klasse dient als Rahmen, um ein Bild zu laden und auszudrucken. Ein
 * ImagePanel wird in einer JScrollPane dargestellt, ein einfaches Menü
 * ermöglich das Ansteuern der Aktionen Öffnen und Drucken.
 */
public class GraphicPrinter extends javax.swing.JFrame {

    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JScrollPane scrollPane;
    private javax.swing.JFileChooser fileChooser;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    PrintableImagePanel imagePanel = null;

    /** Creates new form GraphicPrinter */
    public GraphicPrinter() {
        initComponents();
    }

    /**
     * Komponenten werden erzeugt und auf dem JFrame positioniert.
     */
    private void initComponents() {
        fileChooser = new javax.swing.JFileChooser();
        scrollPane = new javax.swing.JScrollPane();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();

        setTitle("Grafik Drucken");
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        getContentPane().add(scrollPane, java.awt.BorderLayout.CENTER);

        jMenu1.setText("Datei");
        jMenuItem1.setText("\u00d6ffnen");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                openFile(evt);
            }
        });

        jMenu1.add(jMenuItem1);

        jMenuItem2.setText("Drucken");
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                printFile(evt);
            }
        });

        jMenu1.add(jMenuItem2);

        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        pack();
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setSize(new java.awt.Dimension(640, 480));
        setLocation((screenSize.width-640)/2,(screenSize.height-480)/2);
    }

    /**
     * In der Methode printFile wird ein PrinterJob erzeugt und das ImagePanel
     * wird ausgedruckt.
     */
    private void printFile(java.awt.event.ActionEvent evt) {
        try {
            PrinterJob job = PrinterJob.getPrinterJob();
            job.setCopies(1);
            job.setPrintable(imagePanel);
            if(job.printDialog() == false)
                return;//kein Druck, da abgebrochen
            job.print();
        } catch(PrinterException e) {
            e.printStackTrace(System.out);
        }
    }

    /**
     * Eine Grafikdatei öffnen und in der JScrollPane anzeigen.
     */
    private void openFile(java.awt.event.ActionEvent evt) {
        int pressedButton = fileChooser.showOpenDialog(this);
        if(pressedButton == JFileChooser.APPROVE_OPTION) {
            File f = fileChooser.getSelectedFile();
            ImageIcon icon = new ImageIcon(f.getAbsolutePath());
            imagePanel = new PrintableImagePanel(icon.getImage());
            scrollPane.getViewport().setView(imagePanel);
            this.repaint();
        }
    }

    /** Beenden */
    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new GraphicPrinter().show();
    }


}
