Witam, piszę prostą przeglądarkę plików graficznych, jak na razie coś tam chodzi, jednak problem pojawił się w odrysowaniu kolejnych obrazków. Plik do wczytania wybieram poprzez komponent JFileChooser (który jest częścią mojej klasy FileChooser), następnie plik ten jest przekazywany do klasy LoadImage (rysuje ona ten obrazek), a następnie obrazek ten jest wyświetlany w klasie Viewer (główna klasa). Problem w tym, że po uruchomieniu programu tylko za pierwszym razem jak wybieram plik to jest on wczytywany do JPanelu, każdy następny obrazek nic nie zmienia. Używam metody repaint(), jednak może w złym miejscu? Oto kody poszczególnych klas. Pozdrawiam !
Klasa FileChooser:
public class FileChooser extends JDialog //implements ActionListener {
{
private JFileChooser fc;
private File file;
public FileChooser(JFrame frame) {
fc = new JFileChooser();
int returnVal = fc.showDialog(FileChooser.this, "Otwórz");
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
}
}
public File getFile(){ return file; }
}
Klasa LoadImage:
public class LoadImage extends JComponent {
BufferedImage img;
File file;
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, 700, 550, null);
}
public LoadImage(File file) {
if (file == null) { return; }
try { img = ImageIO.read(file); }
catch (IOException e) { e.printStackTrace(); }
}
}
Fragment klasy Viewer, odpowiedzialny za wyświetlanie obrazka:
menuFileOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
fc = new FileChooser(frame);
fileImage = fc.getFile();
image = new LoadImage(fileImage);
infoArea.setText(fileImage.getName());
mainPanel.add(image);
mainPanel.repaint();
}
});
menuFile.add(menuFileOpen);