2015-01-11 2 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에서 항목을 (콤보 상자 인) 변화에 따라 원하는 동작이 gameLabel 변화에 대한 imageIcon입니다. 내가 가지고있는 문제는 두 개의 중에서 선택이 이루어질 때까지 변경되지 않습니다. gameBox 그 후에는 완벽하게 작동합니다. 첫 번째 변경시 변경되도록 설정하려면 어떻게해야합니까? 그리고 왜 그렇게하지 않았습니까?

+2

배포 할 때 응용 프로그램 리소스가 포함 리소스가 될 것이므로 지금 당장 리소스를 액세스하는 것이 좋습니다. [tag : embedded-resource]는 파일이 아닌 URL로 액세스해야합니다. [info. URL을 구성하는 방법은 임베디드 리소스 페이지 (http://stackoverflow.com/tags/embedded-resource/info)를 참조하십시오. –

+2

또한'Map '을 사용하여 이름을 연관시킵니다. – trashgod

+1

@trashgod 좋은 지적이지만,이 경우에는 액션 명령이 리소스의 이름과 정확히 일치하는 것처럼 보이기 때문에'String name = gameBox.getSelectedItem(); 물론 이미지가 시공되고 캐쉬되어야하기 때문에'Map' (또는)에 대한 당신의 제안은 다음과 같다 : url = this.getClass(). getResource ("/ icons/+ name); gameLabel.setIcon (.. 좀 더 구체적으로 말하자면 ** Map '**)를 저장/검색하는 것이 더 합리적입니다. –

답변

-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")))); 

내가 원하는 정확히 어떤 결과.

관련 문제