java - 在 JPanel 中加载图像?

标签 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 {

  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));

  }
}

最佳答案

在您的代码中,您缺少一个 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);
    }
}

关于java - 在 JPanel 中加载图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5725174/

相关文章:

Java 记录导航

java - 从命令行运行,名称错误

c# - Windows 窗体中图像资源的本地化

java - JXMultiSplitPane 在 slider 调整期间导致重新绘制?

java - 我希望突出显示的文本看起来粗体

java - 如何使图像在 Swing 时可拉伸(stretch)?

java - 在java中将印地语字符打印为字符串会导致错误

java - 未找到引用的 bean 'name'

javascript - 使用 Javascript 的图像像素颜色值

java - 如何在JTable中动态添加图片