JfileChooser con preview

di Anonimizzato6441 il
6 risposte
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

  • Grazie per aver risposto,
    ho già visto quella pagina ma mi dava un pò di problemi, perché non mi faceva ridimensionare l'immagine come desideravo, quindi ho optato per quest'altra soluzione che comunque non funziona.
    Altri suggerimenti?
  • Non avevi detto che volevi fare il resize dell'immagine direttamente dal preview.
    da dove hai preso l'esempio?
    Ciao.
  • Bene dopo aver ricopiato il pezzo di codice tutto, o quasi, sembra funzionare... solo che adesso se apro una prima volta il filechooser e poi voglio aprire un'altro file mi si riapre la scelta lasciando selezionato il file aperto precedentemente
    come posso risolvere ciò?
    Grazie
  • Fai un debug e vedi perché rimane memorizzato il file precedente

    Inviato dal mio GT-I9100 con Tapatalk 2
Devi accedere o registrarti per scrivere nel forum
6 risposte