package javacodebook.media.graphic.load; import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; /** * Eine einfache Swing-Anwendung, um das ImagePanel anzuzeigen. */ public class ImageViewer extends JFrame { //das ImagePanel ImagePanel imagePanel = null; /** Creates a new instance of ImageViewer */ public ImageViewer() { setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout()); //Einen Button zum Öffnen von Dateien erstellen JPanel buttonPanel = new JPanel(); getContentPane().add(buttonPanel, BorderLayout.NORTH); JButton openButton = new JButton("Datei öffnen"); buttonPanel.add(openButton); //Einen ActionLister auf den Button legen, der einen FileChooser öffnet openButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { JFileChooser chooser = new JFileChooser(); int status = chooser.showOpenDialog(ImageViewer.this); if (status == JFileChooser.APPROVE_OPTION) { //ausgewählte Datei ermitteln und abspielen File file = chooser.getSelectedFile(); try { ImageIcon icon = new ImageIcon(file.getAbsolutePath()); //vorher evtl. noch vorhandenes ImagePanel entfernen if(imagePanel != null) getContentPane().remove(imagePanel); //das ImagePanel anzeigen imagePanel = new ImagePanel(icon.getImage()); getContentPane().add(imagePanel, BorderLayout.CENTER); //den Frame auf die entsprechende Größe anpassen pack(); } catch(Exception e) { e.printStackTrace(System.out); } } } }); } public static void main(String[] args) { ImageViewer viewer = new ImageViewer(); viewer.pack(); viewer.show(); } } --- Neue Klasse --- package javacodebook.media.graphic.load; import java.awt.*; import javax.swing.JPanel; /** * Ein Panel, dass eine Grafik auf sich selbst darstellt, in der Originalgröße. * Die Größe des Panels wird entsprechend angepasst, kann aber größer sein * als die Grafik, wenn das Panel von der umgebenden Komponente größer * gezogen wird (z.B. in einer JScrollPane, die größer ist als die Grafik). */ public class ImagePanel extends javax.swing.JPanel { //Die Grafik, die angezeigt werden soll private Image image; public ImagePanel(Image image) { this.image = image; } /* * Hier wird die Grafik auf das Panel gezeichnet. Dabei wird ihre Größe als * Masstab genommen und nicht die Größe des Panels. */ public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, image.getWidth(this), image.getHeight(this), this); } /* Es wird die Größe der Grafik als PreferredSize zurückgegeben */ public Dimension getPreferredSize() { return new Dimension(image.getWidth(this), image.getHeight(this)); } }