Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.gui > #3465

Re: why doesn't the Image

From "Anatorian" <anatorian@THRWHITE.remove-dii-this>
Subject Re: why doesn't the Image
Message-ID <fvlnhi$o6e$1@news.cn99.com> (permalink)
Newsgroups comp.lang.java.gui
References <481df4bd$0$1564$b9f67a60@news.newsdemon.com>
Date 2011-04-27 15:45 +0000
Organization TDS.net

Show all headers | View raw


  To: comp.lang.java.gui
Knute Johnson oaOoUo:
> Anatorian wrote:
>> 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?
> 
> Who knows, your code is a mess.  It is best to post a compilable example 
> that we can then test to see where your problem lies.  When you have 
> problems this is the good way for you to isolate it and then work on 
> fixing it in your more complicated code.  Of course the simpler your 
> code the less problems you are going to have.  Any way here is a simple 
> example of how to display an image in a frame in a scroll pane.
> 
> import java.awt.*;
> import java.awt.event.*;
> import java.io.*;
> import java.net.*;
> import javax.swing.*;
> 
> public class test extends JFrame {
>     final JScrollPane sp = new JScrollPane();
>     final JFileChooser fc = new JFileChooser();
> 
>     public test() {
>         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
> 
>         sp.setPreferredSize(new Dimension(400,300));
>         add(sp,BorderLayout.CENTER);
> 
>         JButton b = new JButton("Select Image");
>         b.addActionListener(new ActionListener() {
>             public void actionPerformed(ActionEvent ae) {
>                 int result = fc.showOpenDialog(test.this);
>                 if (result == JFileChooser.APPROVE_OPTION) {
>                     try {
>                         File f = fc.getSelectedFile();
>                         URL url = f.toURI().toURL();
>                         ImageIcon i = new ImageIcon(url);
>                         sp.setViewportView(new JLabel(i));
>                     } catch (MalformedURLException murle) {
>                         murle.printStackTrace();
>                     }
>                 }
>             }
>         });
>         add(b,BorderLayout.SOUTH);
>         pack();
>         setVisible(true);
>     }
> 
>     public static void main(String[] args) {
>         EventQueue.invokeLater(new Runnable() {
>             public void run() {
>                 new test();
>             }
>         });
>     }
> }
> 
> Be careful of setting your layouts to null, most of the time using a 
> layout is better than not.  In my example above, I can resize the frame 
> and my scroll pane resizes too.  If my image is smaller than the scroll 
> pane it centers.  This is all a benefit of the layout manager.
> 
Thanks for your reply.  I have found the where I was wrong, thank you.

---
 * 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

Back to comp.lang.java.gui | Previous | Next | Find similar | Unroll thread


Thread

Re: why doesn't the Image "Anatorian" <anatorian@THRWHITE.remove-dii-this> - 2011-04-27 15:45 +0000

csiph-web