Java 刷新JPanel

Java 刷新JPanel,java,swing,refresh,jpanel,Java,Swing,Refresh,Jpanel,我需要在JPanel上显示不同的图形。 我已将图形文件放入数组中,但当我使用按钮更改它时,JPanel仅显示第一个图形,而不会更改为下一个图形 我调用了panel.revalidate(),但它不起作用 这是我使用过但不起作用的代码段。 JPanel显示是静态的 String[] a = {"image1.txt","image2.txt","image3.txt"}; List<String> files = Arrays.asList(a); publ

我需要在JPanel上显示不同的图形。 我已将图形文件放入数组中,但当我使用按钮更改它时,JPanel仅显示第一个图形,而不会更改为下一个图形

我调用了panel.revalidate(),但它不起作用

这是我使用过但不起作用的代码段。 JPanel显示是静态的

    String[] a = {"image1.txt","image2.txt","image3.txt"};
    List<String> files = Arrays.asList(a);


    public void actionPerformed(ActionEvent e) {
    if (e.getSource() == answer1){
        fileNumber++;
        //call other class for painting (files=array files, fileNumber=index of the array)  
        draw = new drawingPanel(files,fileNumber);
        panel.add(draw);
    }
    panel.revalidate();
    panel.repaint();
}
String[]a={“image1.txt”、“image2.txt”、“image3.txt”};
列表文件=数组.asList(a);
已执行的公共无效操作(操作事件e){
如果(如getSource()==answer1){
fileNumber++;
//调用其他类进行绘制(files=数组文件,fileNumber=数组索引)
draw=新drawingPanel(文件,文件编号);
面板。添加(绘制);
}
panel.revalidate();
panel.repaint();
}

是否一次只显示一个图形?如果是这样,您可能希望尝试使用CardLayout,以便在图形之间轻松切换。有关示例,请参见


前几天,我遇到了一个类似的问题,试图根据用户选择的JTabbedPane的哪个选项卡在UI上动态显示不同的按钮。CardLayout正是让事情变得简单的工具。

您可以尝试保留对drawingPanel的引用,并在重新添加之前调用现有drawingPanel。根据JavaDoc,布局是默认的-它不会像您预期的那样替换图像,而是将下一个drawingPanel放置在前一个的右侧。(调整窗口大小时会发生什么情况?)


顺便问一下,你如何处理通过阵列中最后一幅图像的情况?

是的,一次画一幅。我的程序与你建议看的示例非常相似。我怎么还是不能改变这幅画……这让我很困惑。让我在回答中显示代码的顺序。代码类似于我失败的尝试。使用面板上的CardLayout;每个drawingPanel实例都是一张新卡。请参见示例so将注释限制为300个字符,因此我将在这里继续。搜索“cardPanel”的链接代码,查看我在那里做什么。希望你能适应你(稍微复杂一点)的需要。嗨,ssakl…谢谢你的例子。我现在可以在绘图之前添加代码removeAll()后显示绘图。亲爱的Mike…非常感谢您建议删除代码()。现在,每次单击按钮时,JPanel都会显示不同的图形。哦我一个字都不敢相信,它让我流下了眼泪,让我失眠了这么多天!!哦,我没能回答你的问题。当我传递最后一个图像时,我添加system.exit代码来关闭它。