我无法弄清楚为什么这段代码不起作用。有什么想法吗?
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 :(得分:2)
在您的代码中,您错过了一个JFrame
或JDialog
来包含您的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);
}
}
答案 1 :(得分:2)
我不确定你要做什么,但你的代码看起来像一个旧的AWT示例,不应该用于Swing。
阅读How to Use Icons上的Swing教程,了解使用标签上图片的示例代码。