2011-04-20 60 views
1

我不明白为什么这段代码不会工作。有任何想法吗?在JPanel中加载图像?

import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Insets; 
import java.awt.Toolkit; 
import java.awt.image.ImageObserver; 
import java.net.URL; 

import javax.swing.JPanel; 

public class ImageTool extends JPanel { 

    private static final long serialVersionUID = 1L; 
    private static Image image; 

    public ImageTool(URL url) {  
    image = Toolkit.getDefaultToolkit().getImage(url); 
    rightSize(); 
    } 

    private void rightSize() { 
    int width = image.getWidth(this); 
    int height = image.getHeight(this); 
    if (width == -1 || height == -1) 
     return; 
    addNotify(); 
    System.out.println("Image width: "+width); 
    System.out.println("Image height"+height); 

    } 

    public boolean imageUpdate(Image img, int infoflags, int x, int y, 
     int width, int height) { 
    if ((infoflags & ImageObserver.ERROR) != 0) { 
     System.out.println("Error loading image!"); 
     System.exit(-1); 
    } 
    if ((infoflags & ImageObserver.WIDTH) != 0 
     && (infoflags & ImageObserver.HEIGHT) != 0) { 
     rightSize(); 
     System.out.println("1"); 
    } 
    if ((infoflags & ImageObserver.SOMEBITS) != 0) 
     repaint(); 
    if ((infoflags & ImageObserver.ALLBITS) != 0) { 
     System.out.println("2"); 
     rightSize(); 
     repaint(); 
     return false; 
    } 
    return true; 
    } 

    public void update(Graphics g) { 
    paint(g); 
    } 

    public void paintComponent(Graphics g) { 
    Insets insets = getInsets(); 
    g.drawImage(image, insets.left, insets.top, this); 
    } 
    public static void main(String[] args) throws Exception { 
    String url = "http://www.java2s.com/style/logo.png"; 
    new ImageTool(new URL(url)); 

    } 
} 
+0

它在做什么?错误? – 2011-04-20 03:33:19

+0

也许你可以解释你期望它做什么? – WhiteFang34 2011-04-20 03:39:24

回答

2

在你的代码你缺少一个JFrameJDialog包含在你的JPanel。下面是我相信不会你问的一个例子。它将相同的图像加载到可见窗口中并将尺寸输出到控制台。

public class ImageTool extends JPanel { 
    public ImageTool(URL url) { 
     ImageIcon icon = new ImageIcon(url); 
     JLabel label = new JLabel(icon, JLabel.CENTER); 
     add(label); 

     System.out.println("Image width: " + icon.getIconWidth()); 
     System.out.println("Image height: " + icon.getIconHeight()); 
    } 

    public static void main(String[] args) throws MalformedURLException { 
     URL url = new URL("http://www.java2s.com/style/logo.png"); 
     JPanel panel = new ImageTool(url); 
     JFrame frame = new JFrame(); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+0

是的,那完美的作品。非常感谢。只是想学习这些东西。 – djangofan 2011-04-20 16:43:44

2

我不确定你想要做什么,但你的代码看起来像一个旧的AWT示例,不应该用于Swing。

  1. 没有必要重写更新()
  2. 的paintComponent()应该调用super.paintComponent方法()

阅读How to Use Icons例如代码,在标签上使用图像的Swing教程。