Hallo,
ich habe versucht ein Swingfenster programmiert, welches ein Vector mit Grafiken, bzw. mit Grafikadressen, übergeben kriegt und die Bilder im 2 Sekunden Rythmus auf dem Swingfenster anzeigt.
Problem ist nun, dass die Pfade stimmen, das Swingfenster wird der Bildergröße angepasst, aber das Bild wird nicht angezeigt. Bis es dann zum letzten Bild kommt. Dieses wird schlußendlich richtig angezeigt, der Rest nicht.
Hier der Code der Klasse, hoffentlich könnt ihr mir helfen :
ich habe versucht ein Swingfenster programmiert, welches ein Vector mit Grafiken, bzw. mit Grafikadressen, übergeben kriegt und die Bilder im 2 Sekunden Rythmus auf dem Swingfenster anzeigt.
Problem ist nun, dass die Pfade stimmen, das Swingfenster wird der Bildergröße angepasst, aber das Bild wird nicht angezeigt. Bis es dann zum letzten Bild kommt. Dieses wird schlußendlich richtig angezeigt, der Rest nicht.
Hier der Code der Klasse, hoffentlich könnt ihr mir helfen :
Java:
package PGalerie.view;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
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.Vector;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.imageio.ImageIO;
import PGalerie.model.GalleryImageModel;
import PGalerie.model.GalleryModel;
public class slideshowView extends JFrame {
private Vector<GalleryImageModel> vGIM;
private ImageComponent picLabel;
private BufferedImage iI;
public slideshowView(GalleryModel gM) {
vGIM = gM.getVector();
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setName("SlideShow");
this.setSize(800, 800);
picLabel = new ImageComponent();
picLabel.setSize(800, 800);
Container cp = this.getContentPane();
cp.setLayout(new BorderLayout());
cp.add(picLabel, BorderLayout.CENTER);
this.setResizable(false);
this.setVisible(true);
}
//resized das Bild auf 800 * y Pixel
public BufferedImage resize(BufferedImage original) {
int newWidth = original.getWidth();
int newHeight = original.getHeight();
if (original.getWidth() > 800) {
newWidth = 800;
newHeight = (int) (((double) 800 / (double) original.getWidth()) * original.getHeight());
} else if (original.getHeight() > 800) {
newWidth = (int) (((double) 800 / (double) original.getHeight()) * original.getWidth());
newHeight = 800;
}
BufferedImage resized = new BufferedImage(newWidth, newHeight, original.getType());
Graphics2D g = resized.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(original, 0, 0, newWidth, newHeight, 0, 0, original.getWidth(), original.getHeight(), null);
g.dispose();
return resized;
}
public void startSlideShow() {
int count = 0;
while (!vGIM.elementAt(count).getInSlideShow()){count++;}//Bilder die nicht in der SlideShow sind werden übersprungen.
if (count < vGIM.size()) {
try {
System.out.println(vGIM.elementAt(count).getPath());
iI = resize(ImageIO.read(new File(vGIM.elementAt(count).getPath())));
} catch (IOException e1) {
e1.printStackTrace();
}
picLabel.setSize(iI.getWidth(),iI.getHeight());
this.setSize(iI.getWidth(),iI.getHeight());
picLabel.setImage(iI);
}
for (int i = count+1; i < vGIM.size(); i++) {
Thread t1 = new Thread() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
t1.start();
while (!vGIM.elementAt(count).getInSlideShow()){i++;}
if (i < vGIM.size()) {
try {
System.out.println(vGIM.elementAt(i).getPath());
iI = resize(ImageIO.read(new File(vGIM.elementAt(i).getPath())));
t1.join(2000);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
picLabel.setSize(iI.getWidth(),iI.getHeight());
this.setSize(iI.getWidth(),iI.getHeight());
picLabel.setImage(iI);
}
}
}
class ImageComponent extends JComponent {
private BufferedImage image;
public void setImage(BufferedImage image) {
this.image = image;
setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
repaint();
invalidate();
}
@Override
protected void paintComponent(Graphics g) {
if (image != null) {
g.drawImage(image, 0, 0, this);
}
}
}
}
Zuletzt bearbeitet: