Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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_Jpanel_Java 2d - Fatal编程技术网

Java 图像未显示在JPanel内部

Java 图像未显示在JPanel内部,java,image,swing,jpanel,java-2d,Java,Image,Swing,Jpanel,Java 2d,我想在面板内显示图像。所以我将图像的路径传递给这个方法,打开图像文件并将其传递给一个专用于在面板内绘制图像的私有类的方法。问题是面板一直是空的,不显示任何内容 代码如下: JPanel ImagePane; // I want to add image to this public void getImagePath(String Path) { BufferedImage image = null; try { image=Image

我想在面板内显示图像。所以我将图像的路径传递给这个方法,打开图像文件并将其传递给一个专用于在面板内绘制图像的私有类的方法。问题是面板一直是空的,不显示任何内容

代码如下:

JPanel ImagePane; // I want to add image to this

public void getImagePath(String Path)
{       
    BufferedImage image = null;

    try 
    {
        image=ImageIO.read(new File(Path));
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    DisplayImage display= new DisplayImage();
    display.getImage(image);
}

private class DisplayImage extends JPanel
{
    private BufferedImage image=null;

    public void getImage(BufferedImage im)
    {
        image=im;
        repaint();
    }

    public void paintComponents(Graphics g)
    {
        g.drawImage(image, 0, 0, image.getWidth() /2, image.getHeight()/2,ImagePane);
    }
}

我缺少什么?

paintComponents
是容器的一种方法,用于绘制容器中的每个组件。相反,您需要
paintComponent
来绘制此单个组件

换衣服

public void paintComponents(Graphics g)
方法

@Override
public void paintComponent(Graphics g) {
   super.paintComponent(g);
   g.drawImage(image, 0, 0, image.getWidth() /2, image.getHeight()/2,ImagePane);
}
注意使用了
@Override
注释来帮助检查方法签名

也叫

super.paintComponent(g);
将更新子组件



在方法
getImagePath
中,您似乎没有将
DisplayImage
添加到任何容器中。相反,您可以创建一个本地
显示图像,但不使用它。

您必须覆盖它


但是在您的代码中,您正在创建
公共组件(图形g)
,这是不正确的

使用了
@Override
注释。如果您习惯于在重写方法时使用它,那么这个问题可以在编译时解决。您需要使用以下选项:

    @Override 
    public void paintComponent(Graphics g)

可能是尺寸问题。
DisplayImage
的父容器的布局是什么?在方法
getImagePath
中,您似乎没有将
DisplayImage
添加到任何容器中……当我将
image
添加到面板时,它会显示添加容器。那么我应该添加什么?然后您需要将面板添加到您的容器中。看起来像
add(display)。当您使用
GroupLayout
时,这将不是确切的语法。考虑发布一个实际上我正在学习的Windows Builder。所以我已经在那里创建了一个JPanel,我想在其中添加这个图像。
    @Override 
    public void paintComponent(Graphics g)