Хорошо, так сказать, мой код выглядит следующим образом:Почему значок JLabel не обновляется правильно?
private void gameBoxActionPerformed(java.awt.event.ActionEvent evt) {
gameBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
try {
if(gameBox.getSelectedItem().equals("file1"))
gameLabel.setIcon(new ImageIcon(ImageIO.read(new File("src/icons/file1.png"))));
if(gameBox.getSelectedItem().equals("file2"))
gameLabel.setIcon(new ImageIcon(ImageIO.read(new File("src/icons/file2.png"))));
if(gameBox.getSelectedItem().equals("file3"))
gameLabel.setIcon(new ImageIcon((ImageIO.read(new File("src/icons/file3.png")))));
if(gameBox.getSelectedItem().equals("file4"))
gameLabel.setIcon(new ImageIcon(ImageIO.read(new File("src/icons/file4.png"))));
if(gameBox.getSelectedItem().equals("file5"))
gameLabel.setIcon(new ImageIcon(ImageIO.read(new File("src/icons/file5.png"))));
if(gameBox.getSelectedItem().equals("file6"))
gameLabel.setIcon(new ImageIcon(ImageIO.read(new File("src/icons/file6.png"))));
} catch (IOException ex) {
Logger.getLogger(GUIMain.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
И отправным значок gameLabel
является file1.png
и желаемое действие при изменении элемента в gameBox
(который выпадающий) является imageIcon
для gameLabel
изменения. Проблема, с которой я столкнулся, не изменится до Выборы сделаны внутри gameBox
После этого он отлично работает. Как установить его так, чтобы он менялся при первом изменении? И почему он этого не делает?
Ресурсы приложения станут частью встроенных ресурсов к моменту развертывания, поэтому разумно начать доступ к ним, как если бы они были, прямо сейчас. К [тегу: embedded-resource] должен быть доступен URL, а не файл. См. [Info. страница для встроенного ресурса] (http://stackoverflow.com/tags/embedded-resource/info) для того, как формировать URL-адрес. –
Также рассмотрите 'Map' для связывания имен. –
trashgod
@trashgod Хорошая точка, но в этом случае команда действия, похоже, точно соответствует имени ресурса, у меня возникнет соблазн попробовать что-то вроде 'String name = gameBox.getSelectedItem(); URL url = this.getClass(). GetResource ("/ icons/+ name); gameLabel.setIcon (..'. Но, разумеется, поскольку изображения должны быть загружены при построении и кэшировании, ваше предложение «Карта» (или более конкретно ** «Карта' **) для хранения/извлечения их имеет смысл. –