JPanel removeAll doesn't get rid of previous components

守給你的承諾、 提交于 2019-12-18 05:44:20

问题


I have a swing application in which I display images in a JPanel. If the app is unable to produce the image I want to remove the previous one from the JPanel and replace it with a JTextField and message. I can add the text field , but it's drawn on top of the previous contents, which is itself a subclass of JPanel. Here's what I have:

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();
}

How can I get cdPanel to completely redraw itself?


回答1:


You can simply try calling :

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

instead of

cdPanel.validate();



回答2:


As you are dealing with unpredictable latency, use a SwingWorker to do the loading in the background, as shown here. The example uses pack() to resize the label to that of the image, but you may want to use a fixed-size grid and scale the images, as shown here.



来源:https://stackoverflow.com/questions/18001087/jpanel-removeall-doesnt-get-rid-of-previous-components

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!