JPanel removeAll没有摆脱以前的组件

时间:2013-08-01 17:47:48

标签: java swing jpanel

我有一个swing应用程序,我在JPanel中显示图像。如果应用程序无法生成图像,我想从JPanel中删除前一个图像,并将其替换为JTextField和消息。我可以添加文本字段,但它是在前面的内容之上绘制的,它本身就是JPanel的子类。这就是我所拥有的:

private void displayMessage(String message) {
  JTextField tf = new JTextField(message);
  cdPanel.removeAll();
  cdPanel.add(tf, BorderLayout.NORTH);//tried lots of variations, inc. no layout    
  cdPanel.validate();
}

如何让cdPanel完全重绘?

2 个答案:

答案 0 :(得分:26)

您可以尝试致电:

cdPanel.revalidate();
cdPanel.repaint();   // This is required in some cases

而不是

cdPanel.validate();

答案 1 :(得分:3)

当您处理不可预测的延迟时,请使用SwingWorker在后​​台进行加载,如here所示。该示例使用pack()将标签大小调整为图像的大小,但您可能希望使用固定大小的网格并缩放图像,如here所示。