Salve,
dovrei realizzare un'applicazione MVC che carica un'immagine da file. A tal proposito ho usato jfilechooser, ma vorrei aggiungere a questi l'anteprima dell'immagine che viene selezionata.
Ho quindi creato una classe che estende JPanel ed implementa PropertyChangeListener implementando il relativo metodo così
public void propertyChange(PropertyChangeEvent evt) {
Icon icona = null;
String propertyName = evt.getPropertyName();
if (propertyName.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) {
File newFile = (File) evt.getNewValue();
if (newFile != null) {
String path = newFile.getAbsolutePath();
if (path.endsWith(".jpg") || path.endsWith(".gif") || path.endsWith(".png")
|| path.endsWith(".bmp") || path.endsWith(".jpeg")) {
try {
BufferedImage img = ImageIO.read(newFile);
float widthNew = img.getWidth();
float heightNew = img.getHeight();
float scale = heightNew / widthNew;
widthNew = minWidth;
heightNew = (widthNew * scale);
icona = new ImageIcon(img.getScaledInstance(Math.max(1, (int) widthNew),
Math.max(1, (int) heightNew), Image.SCALE_SMOOTH));
} catch (IOException e) {
logger.info("Si è verifiacto qualche errore\n" + e);
}
}
}
labelMniaturaFoto.setIcon(icona);
this.repaint();
}
}
mentre nell'azione ho questo:
private String apriFile() {
Vista vista = this.controllo.getVista();
JFileChooser fileChooser = vista.getJfileChooser();
PannelloMiniaturaJFileChooser pannelloMfc = new PannelloMiniaturaJFileChooser(vista);
pannelloMfc.setPreferredSize(new Dimension(150, 150));
pannelloMfc.setBorder(BorderFactory.createLineBorder(Color.GRAY));
pannelloMfc.setBorder(BorderFactory.createTitledBorder("Anteprima123"));
fileChooser.setAccessory(pannelloMfc);
fileChooser.addPropertyChangeListener(pannelloMfc);
int codice = fileChooser.showOpenDialog(vista);
if (codice == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
percorso = file.getPath();
image = new Immagine(file);
Modello modello = this.controllo.getModello();
modello.putBean(Costanti.IMMAGINE, image);
return percorso;
} else if (codice == JFileChooser.CANCEL_OPTION) {
logger.info("Comando apri annullato");
}
fileChooser.setSelectedFile(null);
return null;
}
}
perchè il tutto non funziona?? se mi va bene riesco a vedere la prima schermata del jfilechooser, dopo di che se provo ad aprire il file lancia eccezioni varie
grazie per la disponibilità
Saluti