JfileChooser con preview

di il
6 risposte

JfileChooser con preview

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

6 Risposte

Devi accedere o registrarti per scrivere nel forum
6 risposte