刷新JPanel

时间:2009-03-22 00:00:39

标签: java swing refresh jpanel

我需要在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();
}

2 个答案:

答案 0 :(得分:2)

您是否一次只显示一张图纸?如果是这样,您可能想尝试使用CardLayout,因此您可以轻松地在图纸之间切换。有关示例,请参阅http://java.sun.com/docs/books/tutorial/uiswing/layout/card.html

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

答案 1 :(得分:2)

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

顺便说一句,你如何处理数组中最后一个图像的情况?