why doesn't the ImageIcon
To: comp.lang.java.gui
I wrote a simple Swing program. When the click a button and select a jpg file, I want to show this picture in the JScollPanel, but it doesn't appear. The source is here:
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
if(evt.getSource() == this.jButton3) {
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION) {
this.jTextField4.setText(chooser.getSelectedFile().getAbsolutePath());
try{
this.jScrollPane2.add(new ImagePanel(1, chooser.getSelectedFile()));
} catch(Exception e) {
e.printStackTrace();
}
}
}
}
package auction.client;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.geom.Point2D;
import java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
//identifier
private int ID;
//on-screen position
private Point2D.Double position;
//imageIcon to paint on screen
private ImageIcon imageIcon;
//stores all ImagePanel children
private Set panelChildren;
//constructor initilizes position and image
public ImagePanel(int identifier, String imageFileName) throws IOException {
super(null);//specify null layou
this.imageIcon = this.createImageIcon(imageFileName);
this.init(identifier);
}
public ImagePanel(int identifier, byte[] imageData) {
super(null);
this.imageIcon = this.createImageIcon(imageData);
this.init(identifier);
}
public ImagePanel(int identifier, ImageIcon icon) {
super(null);
this.imageIcon = icon;
this.init(identifier);
}
public ImagePanel(int identifier, File iconFile) throws IOException {
super(null);
this.imageIcon = this.createImageIcon(iconFile);
this.init(identifier);
}
private void init(int identifier) {
setOpaque(false);//make transparent
// set unique identifier
ID = identifier;
// set location
position = new Point2D.Double(0, 0);
setLocation(0,0);
Image image = imageIcon.getImage();
setSize(image.getWidth(this), image.getHeight(this));
//create Set to store Panel childre
panelChildren = new HashSet();
}
private ImageIcon createImageIcon(String fileName) {
try {
return new ImageIcon(ImageIO.read(new File(fileName)));
} catch (IOException ex) {
Logger.getLogger(ImagePanel.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
private ImageIcon createImageIcon(byte[] imageData) {
return new ImageIcon(imageData);
}
private ImageIcon createImageIcon(File file) throws IOException {
return new ImageIcon(ImageIO.read(file));
}
//paint Panel to scree
public void paintComponent(Graphics g) {
super.paintComponent(g);
//if image is ready, paint it to screen
imageIcon.paintIcon(this, g, 0, 0);
}
public void add(ImagePanel panel, int index) {
panelChildren.add(panel);
super.add(panel, index);
}
public void remove(ImagePanel panel) {
panelChildren.remove(panel);
super.remove(panel);
}
public void setIcon(ImageIcon icon) {
this.imageIcon = icon;
}
public ImageIcon getImageIcon() {
return imageIcon;
}
public Point2D.Double getPosition() {
return position;
}
public void setPosition(double x, double y) {
this.position.setLocation(x, y);
this.setLocation((int) x, (int) y);
}
public int getID() {
return ID;
}
public Set getChildren() {
return panelChildren;
}
}
Who can help me?
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24