Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #3465
| 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 |
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
Re: why doesn't the Image "Anatorian" <anatorian@THRWHITE.remove-dii-this> - 2011-04-27 15:45 +0000
csiph-web