У меня есть значок для JLabel, который я могу увидеть изменение только один раз. Когда пустое, новое заданное изображение для приведенного ниже кода работает так, как должно. Но после этого изображение застревает. Никакое новое изображение не может заменить его. Когда я использую repaint on panelPainting без revalidate(), я не получаю никаких изображений вообще. Это тоже странно.JLabel Icon resisting change
Вот код (panelMain дома panelPainting)
//get image from somewhere
JLabel imageLabel = new JLabel();
Icon imageIcon = new ImageIcon(image);
imageLabel.setIcon(imageIcon);
panelPainting.setAlignmentX(JLabel.CENTER);
panelPainting.add(imageLabel); // default center section
//my insanity starts here
panelPainting.revalidate();
panelMain.remove(panelPainting);
panelMain.revalidate();
EDIT: Я проверил, что изображение меняет каждый раз.
Я пытался ваше предложение, и я только что заметил что-то неловко. Новые изображения есть все же, но рядом друг с другом. Он просто добавил изображения бок о бок вместо замены ... – mechanicum
1. then container.revalidate() и container.repaint() работает во всех случаях, 2. конечный результат зависит от используемого LayoutManager для JPanel, возможно, для JList , изменить пример кода из JComboBoxand image renderer из учебника Oracle – mKorbel
Да, ваш ответ показал путь. По-видимому, panelPaintings добавил компоненты ярлыков, но не заменил их. ** panelMain.remove (panelPainting); ** также не требуется. Спасибо. – mechanicum