Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JPanel中加载图像?_Java_Image_Swing - Fatal编程技术网

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

  • 不需要重写update()
  • paintComponent()应调用super.paintComponent()

  • 阅读Swing教程,了解使用标签上图像的示例代码。

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

  • 不需要重写update()
  • paintComponent()应调用super.paintComponent()

  • 阅读Swing教程,了解在标签上使用图像的示例代码。

    它在做什么?错误?也许你可以解释你期望它做什么?它在做什么?错误?也许你可以解释一下你期望它做什么?是的,这很好。非常感谢。只是试着学习这些东西。是的,这很好用。非常感谢。只是想学这些东西。