import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Bildbetrachter extends JFrame implements Diashow {
private JPanel p_btnPanel, p_picturePanel;
private JButton btn_choose;
private JButton btn_back;
private JButton btn_next;
private JButton btn_diashow;
private JLabel l_picture, l_name;
private JFileChooser chooser;
private File[] pictures;
private int index;
private Timer timer;
public Bildbetrachter(String title) {
super(title);
setSize(780, 585);
setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container content = getContentPane(); //Für Java-Versionen unter 1.5
l_name = new JLabel("Dateiname: ");
p_btnPanel = new JPanel(new GridLayout(1, 3));
//mit einem GridLayout könnten hier mehrere Bilder gleichzeitig angezeigt werden
p_picturePanel = new JPanel(new BorderLayout());
l_picture = new JLabel();
l_picture.setHorizontalAlignment((int)JLabel.CENTER_ALIGNMENT);
p_picturePanel.add(l_picture);
btn_choose = new JButton("Bilder auswählen");
btn_choose.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btn_chooseClicked();
}
});
p_btnPanel.add(btn_choose);
btn_back = new JButton("< Voriges Bild");
btn_back.setEnabled(false);
btn_back.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btn_backClicked();
}
});
p_btnPanel.add(btn_back);
btn_next = new JButton("Nächstes Bild >");
btn_next.setEnabled(false);
btn_next.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
btn_nextClicked();
}
});
p_btnPanel.add(btn_next);
btn_diashow = new JButton("Diashow");
btn_diashow.setEnabled(false);
btn_diashow.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Diashow")) {
startDiashow();
}
else if(e.getActionCommand().equals("Stopp")) {
stopDiashow();
}
}
});
p_btnPanel.add(btn_diashow);
content.add(l_name, BorderLayout.NORTH);
content.add(new JScrollPane(p_picturePanel), BorderLayout.CENTER);
content.add(p_btnPanel, BorderLayout.SOUTH);
chooser = new JFileChooser();
chooser.addChoosableFileFilter(new DateiFilter());
chooser.setMultiSelectionEnabled(true); //Auswahl mehrerer Dateien erlauben
}
//Überschreibt Methode von Diashow
public void nextPicture() {
btn_nextClicked();
}
//FileChooser anzeigen, Dateien auswählen, erstes Bild anzeigen
private void btn_chooseClicked() {
int result = chooser.showDialog(this, "Auswählen");
switch(result) {
case JFileChooser.APPROVE_OPTION:
pictures = chooser.getSelectedFiles();
if(pictures == null) {
return;
}
btn_next.setEnabled(true);
btn_back.setEnabled(true);
btn_diashow.setEnabled(true);
index = 0;
l_picture.setIcon(new ImageIcon(pictures[index].getAbsolutePath()));
l_name.setText("Dateiname: "+pictures[index].getName());
}
}
//voriges Bild anzeigen
private void btn_backClicked() {
index--;
if(index < 0) {
index = pictures.length-1;
}
l_picture.setIcon(new ImageIcon(pictures[index].getAbsolutePath()));
l_name.setText("Dateiname: "+pictures[index].getName());
}
//nächstes Bild anzeigen
private void btn_nextClicked() {
index++;
if(index > pictures.length-1) {
index = 0;
}
l_picture.setIcon(new ImageIcon(pictures[index].getAbsolutePath()));
l_name.setText("Dateiname: "+pictures[index].getName());
}
//Diashow starten
private void startDiashow() {
timer = new Timer(this, 5000); //Wartezeit 5s
timer.start();
btn_diashow.setText("Stopp");
}
//Diashow stoppen
private void stopDiashow() {
timer.interrupt();
btn_diashow.setText("Diashow");
}
//innere Klasse, realisiert einen Dateifilter für Standard-Grafikdateien
class DateiFilter extends javax.swing.filechooser.FileFilter {
public String getDescription() {
return "Grafikdateien (*.gif, *.jpg, *.png)";
}
public boolean accept(File file) {
if(file.isDirectory())
return true;
else if(file.getName().endsWith(".gif"))
return true;
else if(file.getName().endsWith(".jpg"))
return true;
else if(file.getName().endsWith(".png"))
return true;
else
return false;
}
}
public static void main(String[] args) {
new Bildbetrachter("Einfacher Bildbetrachter").setVisible(true);
}
}