V
v1cious
Gast
Hi,
ich fange grade erst wirklich an mit swing zu programmieren und bin am verzweifeln..
Mein Programm soll Bilder aus einem Ordner herauslesen und (vorerst) nur das erste anzeigen.
Ich mache das mit einem Filechooser, der nur Ordner darstellt. In dessen ActionListener werden die Dateinamen aus dem ausgewählten Ordner ausgelesen und zu einer ArrayList names Images hinzugefügt. Klappt auch alles wunderbar.
Jetzt habe ich "JComponent orgImg", welches einmal ein JLabel sein soll ("Kein Bild vorhanden, blabla"), und sobald dann was in meinem Images-Array drinsteht ein ImageViewer werden soll. Dieser sieht folgendermaßen aus:
Die Zuweisung nehme ich folgendermaßen vor:
Nachdem dieses viewImage in meinem filechooser-Actionlistener durchgelaufen ist, ist orgImg ein ImageViewer (oder?). Dann rufe ich orgImg.repaint() auf und nichts passiert..? Ich weiß ehrlich nicht was ich falsch mache, vielleicht könnt ihr mir helfen...
Mfg v1c
ps: hier noch der code vom Actionlistener des filechoosers:
ich fange grade erst wirklich an mit swing zu programmieren und bin am verzweifeln..
Mein Programm soll Bilder aus einem Ordner herauslesen und (vorerst) nur das erste anzeigen.
Ich mache das mit einem Filechooser, der nur Ordner darstellt. In dessen ActionListener werden die Dateinamen aus dem ausgewählten Ordner ausgelesen und zu einer ArrayList names Images hinzugefügt. Klappt auch alles wunderbar.
Jetzt habe ich "JComponent orgImg", welches einmal ein JLabel sein soll ("Kein Bild vorhanden, blabla"), und sobald dann was in meinem Images-Array drinsteht ein ImageViewer werden soll. Dieser sieht folgendermaßen aus:
Java:
package dialog;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
@SuppressWarnings("serial")
public class ImageViewer extends JComponent {
public BufferedImage img;
int size = DialogUtil.RESIZE;
public ImageViewer(BufferedImage image) {
this.img = image;
}
public void paintComponent(Graphics g) {
g.drawImage(img.getScaledInstance(size, size, BufferedImage.SCALE_DEFAULT), 0, 0, null);
}
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
}
Die Zuweisung nehme ich folgendermaßen vor:
Java:
private void viewImage(int idx) {
BufferedImage image;
if (Images != null) {
Path path = Images.get(idx);
try {
image = ImageIO.read(new File(path.toString()));
orgImg = new ImageViewer(image);
} catch (IOException e) {
}
} else {
orgImg = new JLabel("No Image input folder selected");
}
}
Nachdem dieses viewImage in meinem filechooser-Actionlistener durchgelaufen ist, ist orgImg ein ImageViewer (oder?). Dann rufe ich orgImg.repaint() auf und nichts passiert..? Ich weiß ehrlich nicht was ich falsch mache, vielleicht könnt ihr mir helfen...
Mfg v1c
ps: hier noch der code vom Actionlistener des filechoosers:
Java:
// Input FC Button
JButton inputSelectBtn = new JButton(DialogUtil.SELECT);
inputSelectBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int returnVal = inputFC.showOpenDialog(FilterPanel.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
inputVwr.setText(inputFC.getSelectedFile().toString());
Path dir = inputFC.getSelectedFile().toPath();
DirectoryStream<Path> stream = null;
try {
stream = dir.newDirectoryStream("*.bmp");
Images = new ArrayList<Path>();
for (Path file : stream) {
Images.add(file);
}
viewImage(0);
orgImg.repaint();
} catch (IOException x) {
System.err.println(x);
} finally {...}
}
}
});