package Galerie;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingConstants;
import javax.swing.SwingWorker;
public class Window extends JFrame {
private static final long serialVersionUID = 3924944672470552800L;
private File file;
private List<BufferedImage> list=new ArrayList<BufferedImage>();
private String[] supportetTypes=new String[]{"png","gif","jpg","jpeg"};
private ImageLabel lblImages;
private JProgressBar bar;
private int index=0;
public Window() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
getContentPane().setLayout(new BorderLayout());
JPanel panelButtons = new JPanel();
getContentPane().add(panelButtons, BorderLayout.SOUTH);
panelButtons.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JButton button = new JButton("<");
panelButtons.add(button);
button.addActionListener(e->prevImage());
JButton button_1 = new JButton(">");
panelButtons.add(button_1);
button_1.addActionListener(e->nextImage());
JButton btnOrdnerAuswhlen = new JButton("Ordner Ausw\u00E4hlen");
panelButtons.add(btnOrdnerAuswhlen);
btnOrdnerAuswhlen.addActionListener(e->openFileChooser());
lblImages = new ImageLabel();
lblImages.setText("Kein Bild geladen.");
lblImages.setHorizontalAlignment(SwingConstants.CENTER);
getContentPane().add(lblImages, BorderLayout.CENTER);
lblImages.setLayout(new BorderLayout());
bar=new JProgressBar();
bar.setMinimum(0);
lblImages.add(bar,BorderLayout.SOUTH);
}
private void nextImage(){
if(list!=null&&list.size()!=0){
index=list.size()>index+1?index+1:0;
lblImages.setImg(list.get(index));
}
}
private void prevImage(){
if(list!=null&&list.size()!=0){
index=index>0?index-1:list.size()-1;
lblImages.setImg(list.get(index));
}
}
private void loadImages(){
new Worker().execute();
}
private boolean isSupportet(String name){
for(String end:supportetTypes){
if(name.toLowerCase().endsWith(end.toLowerCase())){
System.out.println("File "+name+" loaded");
return true;
}
}
System.out.println("File "+name+" is not an Image");
return false;
}
private void openFileChooser(){
JFileChooser chooser=new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int result=chooser.showOpenDialog(this);
if(result==JFileChooser.APPROVE_OPTION){
file=chooser.getSelectedFile();
System.out.println(file.toString());
loadImages();
}
}
class ImageLabel extends JLabel{
private static final long serialVersionUID = -2292257639281450634L;
private BufferedImage img;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(img!=null){
Graphics2D g2d=(Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setColor(Color.WHITE);
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(),this);
}
}
public BufferedImage getImg() {
return img;
}
public void setImg(BufferedImage img) {
this.img = img;
repaint();
}
}
class Worker extends SwingWorker<Integer, String>
{
protected Integer doInBackground() throws Exception
{
bar.setVisible(true);
bar.setMaximum(file.listFiles().length);
bar.setValue(0);
index=0;
list.clear();
lblImages.setImg(null);
for(File f:file.listFiles()){
if(isSupportet(f.getName())){
try {
list.add(ImageIO.read(f));
} catch (IOException e) {
e.printStackTrace();
}
}
bar.setValue(bar.getValue()+1);
}
return 1;
}
protected void done()
{
bar.setVisible(false);
if(list.size()>0){
lblImages.setImg(list.get(index));
}
}
}
}