Tzor
25-11-2010, 13:20
Ciao a tutti. Ho questo codice:
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class ImageViewer extends JFrame implements ActionListener {
private JLabel label;
private JMenuItem openItem;
private JMenuItem exitItem;
public ImageViewer() {
setTitle("ImageViewer");
setSize(300, 400);
JMenuBar mbar = new JMenuBar();
JMenu m = new JMenu("File");
openItem = new JMenuItem("Open");
openItem.addActionListener(this);
m.add(openItem);
exitItem = new JMenuItem("Exit");
exitItem.addActionListener(this);
m.add(exitItem);
mbar.add(m);
setJMenuBar(mbar);
label = new JLabel();
Container contentPane = getContentPane();
contentPane.add(label, "Center");
setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if (source == openItem) {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
return f.getName().toLowerCase().endsWith(".jpg")
|| f.isDirectory();
}
public String getDescription() {
return "JPEG Images";
}
});
int r = chooser.showOpenDialog(this);
if (r == JFileChooser.APPROVE_OPTION) {
String name = chooser.getSelectedFile().getName();
label.setIcon(new ImageIcon(name));
}
} else if (source == exitItem)
System.exit(0);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new ImageViewer().setVisible(true);
}
});
}
}
Si tratta di una semplice applicazione che fa scegliere un'immagine e la visualizza in una JLabel come icona.
Il problema è che con molte immagini non funziona. Se ad esempio seleziono una piccola immagine jpeg dalla mia home non me la apre, mentre se metto la stessa immagine nella directory del progetto all'interno del workspace la apre senza problemi.
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class ImageViewer extends JFrame implements ActionListener {
private JLabel label;
private JMenuItem openItem;
private JMenuItem exitItem;
public ImageViewer() {
setTitle("ImageViewer");
setSize(300, 400);
JMenuBar mbar = new JMenuBar();
JMenu m = new JMenu("File");
openItem = new JMenuItem("Open");
openItem.addActionListener(this);
m.add(openItem);
exitItem = new JMenuItem("Exit");
exitItem.addActionListener(this);
m.add(exitItem);
mbar.add(m);
setJMenuBar(mbar);
label = new JLabel();
Container contentPane = getContentPane();
contentPane.add(label, "Center");
setDefaultCloseOperation(this.DISPOSE_ON_CLOSE);
}
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if (source == openItem) {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {
public boolean accept(File f) {
return f.getName().toLowerCase().endsWith(".jpg")
|| f.isDirectory();
}
public String getDescription() {
return "JPEG Images";
}
});
int r = chooser.showOpenDialog(this);
if (r == JFileChooser.APPROVE_OPTION) {
String name = chooser.getSelectedFile().getName();
label.setIcon(new ImageIcon(name));
}
} else if (source == exitItem)
System.exit(0);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new ImageViewer().setVisible(true);
}
});
}
}
Si tratta di una semplice applicazione che fa scegliere un'immagine e la visualizza in una JLabel come icona.
Il problema è che con molte immagini non funziona. Se ad esempio seleziono una piccola immagine jpeg dalla mia home non me la apre, mentre se metto la stessa immagine nella directory del progetto all'interno del workspace la apre senza problemi.