Java 在JPanel中加载图像?
我不明白为什么这个代码不起作用。有什么想法吗Java 在JPanel中加载图像?,java,image,swing,Java,Image,Swing,我不明白为什么这个代码不起作用。有什么想法吗 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 {
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));
}
}
在代码中,您缺少一个
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);
}
}
在代码中,您缺少一个
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);
}
}
我也不确定您想做什么,但是您的代码看起来像一个旧的AWT示例,不应该用于Swing
阅读Swing教程,了解使用标签上图像的示例代码。我也不确定您想做什么,但您的代码看起来像一个旧的AWT示例,不应用于Swing
阅读Swing教程,了解在标签上使用图像的示例代码。它在做什么?错误?也许你可以解释你期望它做什么?它在做什么?错误?也许你可以解释一下你期望它做什么?是的,这很好。非常感谢。只是试着学习这些东西。是的,这很好用。非常感谢。只是想学这些东西。