PDA

View Full Version : [JAVA]Jfilechooser non ridimensionabile con antemprima


cerza
02-12-2013, 15:31
Salve a tutti,
dovrei realizzare una progetto in java 2d che prevede il caricamento immagini e la successiva modifica di queste applicando filtri.
Vorrei far visualizzare prima dell'apertura file l'anteprima dell'immagine, per cui ho creato una classe che estende JPanel ed implements PropertyChangeListener, i cui codice è il seguente:

public PannelloMiniaturaJFileChooser(Vista vista) {
this.vista = vista;
minWidth = 245;
this.setPreferredSize(new Dimension(150, 100));
this.setLayout(new BorderLayout());
this.setBorder(BorderFactory.createLineBorder(Color.GREEN));
this.setBorder(BorderFactory.createTitledBorder("Anteprima"));

initComponents();

}


public void propertyChange(PropertyChangeEvent evt) {
Icon icon = null;
String propertyName = evt.getPropertyName();

if (JFileChooser.SELECTED_FILE_CHANGED_PROPERTY.equals(propertyName)) {
File newFile = (File) evt.getNewValue();

if (newFile != null) {
String path = newFile.getAbsolutePath();
logger.info("path --> " + path);
if (path.endsWith(".JPG") || path.endsWith(".jpg") || path.endsWith(".gif") || path.endsWith(".png")
|| path.endsWith(".bmp") || path.endsWith(".jpeg")) {
try {
BufferedImage img = ImageIO.read(newFile);
float width = img.getWidth();
float height = img.getHeight();
float scale = height / width;
width = minWidth;
height = (width * scale);

icon = new ImageIcon(img.getScaledInstance(Math.max(1, (int) width),
Math.max(1, (int) height), Image.SCALE_SMOOTH));


} catch (IOException e) {
//Some error reported!
}
}
}

labelMiniaturaFoto.setIcon(icon);
this.repaint();

}
}


ho poi una classe che estende AbstractAction, in cui:

private String acquisisciFile() {
Vista vista = this.controllo.getVista();
JFileChooser fileChooser = vista.getJfileChooser();

PannelloMiniaturaJFileChooser pannelloMfc = new PannelloMiniaturaJFileChooser(vista);
pannelloMfc.getLabelMiniaturaFoto().setHorizontalAlignment(SwingConstants.CENTER);
pannelloMfc.add(pannelloMfc.getLabelMiniaturaFoto(), BorderLayout.CENTER);

fileChooser.setAccessory(pannelloMfc);
fileChooser.addPropertyChangeListener(pannelloMfc);


fileChooser.setApproveButtonText("Apri Foto");
fileChooser.setDialogTitle("Selezionare un file");
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;
//return file.toString();
} else if (codice == JFileChooser.CANCEL_OPTION) {
logger.info("Comando apri annullato");
}

//Reset the file chooser for the next time it's shown.
fileChooser.setSelectedFile(null);

return null;
}



Quanto scritto mi permette di visualizzare parte dell'immagine senza peraltro poterla centrare nel riquadro.
Dove sbaglio? Inoltre vorrei che le dimensioni del filechooser oltre una certa dimensione non devono essere modificate, come posso fare anche questo?
Grazie per la disponibilità.
Saluti