2010-06-17 13 views
3
class Deal implements ActionListener 
    { 
     public void actionPerformed(ActionEvent e) 
     { 
      dl.setDeck(); 
      dl.shuffle(); 
      dl.firstDraw(pl); 

      for(Card c:pl.showHand()) 
      panelplay.add(new JLabel(c.getImageIcon())); 

      panelplay.validate(); 
     } 
    } 

이것은 Jbutton의 이벤트 처리기입니다. 메서드 pl.showHand()는 사용자 정의 클래스 'Card'의 ArrayList를 반환합니다. 루프 내부에 println()을 삽입하면 인쇄가 표시되므로 코드가 실행 중이지만 패널 panelplay에는 카드 이미지가 표시되지 않습니다.이미지가 JPanel에 표시되지 않습니다.

+0

이 게시물을 봐 http://stackoverflow.com/questions/299495/java-swing-how-to-add-anage-to-a-jpanel –

+0

페인트 구성 요소를 덮어 쓰지 않고 다른 옵션을 사용할 수 있습니다. 그것을 JLabel에 추가 한 다음 JPanel에 레이블을 추가하십시오. 나는 그것을하고있다. 그러나 아직도 나를 위해 일하지 않고있다. : | –

답변

0

ActionListener에 JLabel을 추가하지 않으려합니다.

ActionListener에 이미 추가 된 JLabel setText() 메서드를 사용하려고합니다.

GUI를 만들 때 모든 Swing 구성 요소를 한 번 정의하십시오.

+0

ActionListener에 JLabel을 추가하면 무엇이 잘못 되었습니까? 게임이 진행됨에 따라 이미지가 변경되어야합니다 ... –

+0

스윙 구성 요소에 메서드가있는 이유가 여기에 있습니다. 이미 추가 된 JLabel에 텍스트를 설정합니다. 이미 추가 된 JPanel에 이미지를 그립니다. GUI를 만들 때 모든 Swing 구성 요소를 한 번 정의합니다. –

+0

표시 할 수있는 카드의 수를 알지 못합니다. 게임 플레이에 따라 다릅니다. 처음에 얼마나 많은 JLabel을 선언합니까? –

1

Gilbert가 말한 것처럼 Swing Tutorial part that concerns Labels을보세요.
JLabel의 다음과 같은 방법이 있습니다 ... 무효의 setIcon (아이콘)
아이콘있는 getIcon()

Also look at the SplitPaneDemo 그것은 정확하게 당신이 원하는 않는, 할 수 있습니다, 심지어 run it with JNLP to see.

+0

어떤 게임을하려고하십니까? 표시해야하는 최대 카드 수는 얼마입니까? –

+0

"거래"버튼을 누르 자마자 JPanel에 카드를 보여 주려고합니다. (블랙 잭) 처음에는 2cards가 처리되었습니다. –

2

패널의 기존 라벨은 어떻게됩니까? 당신은 그들을 제거하지 않습니다. 나는 당신이 FlowLayout을 사용하고있는 것을 추측하고 있습니다. 레이블은 패널의 끝에 추가되어 보이지 않습니다.

그래서 한 가지 해결책은 패널에 레이블을 다시 추가하기 전에 panel.removeAll()을 사용하는 것입니다. 그때 사용

panel.revalidate(); 
panel.repaint(); 

또는 이전 제안 더 나은 옵션은 라벨을 교체하지만, 단지의 setIcon() 메소드를 사용하여 아이콘을 교체하지 않는 것입니다.

관련 문제