Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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_Paintcomponent - Fatal编程技术网

Java JPanel背景图像未更改

Java JPanel背景图像未更改,java,image,swing,jpanel,paintcomponent,Java,Image,Swing,Jpanel,Paintcomponent,我使用下面的类向JPanel添加背景图像 但当应用程序正在执行且图像已更改时,新更新的图像不会显示在屏幕上 Image image = new ImageIcon(path + item.getItemID() + ".png").getImage(); panel = new ImagePanel(image); 变量路径是工作区外的静态路径。如果您“使用新的JPanel更新JPanel”,则您不是在“更新”,而是在创建一个新的JPanel。 例如,我们有一个名为“pane

我使用下面的类向JPanel添加背景图像

但当应用程序正在执行且图像已更改时,新更新的图像不会显示在屏幕上

    Image image = new ImageIcon(path + item.getItemID() + ".png").getImage();
    panel = new ImagePanel(image);
变量路径是工作区外的静态路径。

如果您“使用新的JPanel更新JPanel”,则您不是在“更新”,而是在创建一个新的JPanel。 例如,我们有一个名为“panelTest”的绿色JPanel:

现在我们有了一个按钮,可以将JPanel背景颜色从绿色更改为红色,但方式不对:

JButton btnTest = new JButton("Test");
btnTest.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        panelTest = new JPanel(); //woops, now we have 2 panels...
        panelTest.setBackground(Color.red);
    }
});
请注意,
panelTest
是一个指向绿色面板的指针,现在它指向一个红色背景的新JPanel。这个新的JPanel尚未添加到任何容器中,因此不会显示。旧的绿色面板将保持可见

更新图像的最佳方法是在ImagePanel内创建一个方法,如:

public void setImage( Image image ) {
    this.img = image;
    this.repaint();
}

这样,您就不必仅仅为了更改背景而创建一个新的ImagePanel。

在更改图像后尝试
panel.repaint()
。另外,如何更改图像?您正在创建一个新的ImagePanel吗?尝试了这个,也尝试了用新的JPanel更新JPanel。但是得到了同样的旧形象。在paintsal中手动更改图像因此,如果图像从应用程序向JPanel background显示图像的路径中删除,我不仅创建了新的JPanel,而且父帧JInternalFrame也是新的。ok@Kidaaaa为什么不共享一些代码,以便我们可以看到问题所在?
public void setImage( Image image ) {
    this.img = image;
    this.repaint();
}