2011-02-06 2 views
0

고유 한 eventListener로 whst btn을 눌렀 음을 인식 할 수 있습니까?어떤 버튼이 눌 렸는지 java

나는이 코드를 시도했지만

ActionListener one = new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        if (gr1.getCounter1() < 5) { 
         gr1.setCounter1(gr1.getCounter1() + 1); 
         if (arraybtn[1].isSelected()) 
          test1.setIcon(play1a); 
         if (arraybtn[2].isSelected()) 
          test1.setIcon(play1b); 
         if (arraybtn[3].isSelected()) 
          test1.setIcon(play1c); 
         if (arraybtn[4].isSelected()) 
          test1.setIcon(play1d); 
         if (arraybtn[5].isSelected()) 
          test1.setIcon(play1e); 
        } else { 
         pn5.setText("No more cards"); 
        } 
       } 
      }; 

덕분에 작동하지 않았다!

답변

1

코드는 위의 리팩토링되는 큰 필요하다. 예를 들어, JButton의 배열을 가지고 있다면 ImageIcon의 유사한 배열을 사용하지 않는 것이 좋습니다. 블록을 모두 제거 할 수 있습니다. 예를 들어

:

ActionListener one = new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     if (gr1.getCounter1() < 5) { 
      gr1.setCounter1(gr1.getCounter1() + 1); 
      for (int i = 0; i < arraybtn.length; i++) { 
       if (arraybtn[i] == e.getSource()) { 
       test1.setIcon(play1Icons[i]); 
       } 
      } 
     } else { 
      pn5.setText("No more cards"); 
     } 
    } 
    }; 

등 플레이어 클래스, 카드 클래스, 갑판 클래스하는 GameManager를 만드는 등 더 리팩토링에 대한 다른 스레드에서 내 추천을 잊지 마세요.

질문에 대해서는 "이 스크립트에서는 play1a = hand.get (1) .getImage()가 있습니다. 만약 내가 test1.setIcon (play1Icons [i])와 같은 다른 배열을 사용한다면, 어떻게 정의 할 수 있습니까? 변하기 쉬운?"

ArrayList를 사용하고 있습니까? 이를 해결하는 한 가지 방법은

test1.setIcon(hand.get(i).getImage()); 

또는 그 일부 변형을 수행하는 것입니다.

+0

안녕 호버 크래프트, 나는 당신의 제안을 잊지 않아 :)이 스크립트에서 나는 play1a = hand.get (1) .getImage(); test1.setIcon (play1Icons [i])와 같은 다른 배열을 사용하면 어떻게 변수를 정의 할 수 있습니까? 한 번만 더 감사드립니다. – anvd

+0

위의 게시물에서 편집을 참조하십시오. 주석보다 답변에 코드를 표시하는 것이 훨씬 쉽습니다. –

+0

위대한 솔루션 :) 코드의 상당 부분을 줄이십시오. – anvd

5

ActionEvent 개체의 getSource 메서드를 사용하십시오.

if (e.getSource() == arraybtn[1]) 
    test1.setIcon(play1a); 
if (e.getSource() == arraybtn[2]) 
    test1.setIcon(play1b); 
if (e.getSource() == arraybtn[3]) 
    test1.setIcon(play1c); 
if (e.getSource() == arraybtn[4]) 
    test1.setIcon(play1d); 
if (e.getSource() == arraybtn[5]) 
    test1.setIcon(play1e); 

이벤트 (누른 즉 버튼)의 소스를 얻을 : 같은

코드는 보일 것이다.

http://download.oracle.com/javase/1.4.2/docs/api/java/util/EventObject.html#getSource()

+0

그래서 당신은 얻을 것 경우 (arraybtn [1] .equals (e.getSource())) – hauntsaninja

+0

당신을 감사합니다 :-), 완벽한 – anvd

+0

@hauntsaninja : 그는 등호를 사용할 수 있지만 필요가 위부터이 없다 한 객체 참조가 다른 객체 참조와 완전히 같으면 코드가 테스트됩니다. –

관련 문제