2015-01-11 3 views
-1

Хорошо, так сказать, мой код выглядит следующим образом:Почему значок 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 После этого он отлично работает. Как установить его так, чтобы он менялся при первом изменении? И почему он этого не делает?

+2

Ресурсы приложения станут частью встроенных ресурсов к моменту развертывания, поэтому разумно начать доступ к ним, как если бы они были, прямо сейчас. К [тегу: embedded-resource] должен быть доступен URL, а не файл. См. [Info. страница для встроенного ресурса] (http://stackoverflow.com/tags/embedded-resource/info) для того, как формировать URL-адрес. –

+2

Также рассмотрите 'Map ' для связывания имен. – trashgod

+1

@trashgod Хорошая точка, но в этом случае команда действия, похоже, точно соответствует имени ресурса, у меня возникнет соблазн попробовать что-то вроде 'String name = gameBox.getSelectedItem(); URL url = this.getClass(). GetResource ("/ icons/+ name); gameLabel.setIcon (..'. Но, разумеется, поскольку изображения должны быть загружены при построении и кэшировании, ваше предложение «Карта» (или более конкретно ** «Карта ' **) для хранения/извлечения их имеет смысл. –

ответ

-1

Я установил его.

Как упоминалось в geert3, у меня были вложенные слушатели действий, и они вызывали проблемы.

Решение коротко:

 if(gameBox.getSelectedItem().equals("file1")) 
      gameLabel.setIcon((Icon) new ImageIcon("src/icons/file1.png")); 
       repaint(); 

Вместо:

 if(gameBox.getSelectedItem().equals("file1")) 
       gameLabel.setIcon(new ImageIcon(ImageIO.read(new File("src/icons/file1.png")))); 

Привели в точности то, что я хотел.

Смежные вопросы