2013-05-08 6 views
-2

이제는 트레이를 표시하는 일부 JButton을 사용하는 트레이 게임을 구현 중입니다. 그러나 트레이는 7x7을 만듭니다. 따라서 액션 리스너를 구현하는 것은 그렇게 재미 있지 않습니다. 이 코드는 다음과 같습니다.동작 수신기 (자바)를 구현하는 DRY 코드

public void actionPerformed(ActionEvent ae) 
    { 
     if (ae.getSource() == Bouton11) 
      { 
       this.PosePion(1, 1, Bouton11); 
      } 
      else if (ae.getSource() == Bouton21) 
      { 
       this.PosePion(2, 1, Bouton21); 
      } 
      else if (ae.getSource() == Bouton31) 
      { 
       this.PosePion(3, 1, Bouton31); 
      } 
      ...... 
    } 

어떻게 이런 종류의 코드를 줄일 수 있습니까? :/

감사합니다 :)

답변

2

독자적인 수신기 유형을 만듭니다. 유형은 ActionListener (따라서 actionPerformed 메소드)을 구현해야하며 버튼과 두 개의 정수의 세 가지 매개 변수로 구성되어야합니다. 이 세 가지 매개 변수가 필요한 이유는 PosePion 메서드 (대문자로 입력해야 함) (posePion)에 전달할 수 있기 때문입니다.

class PoseActionListener implements ActionListener { 

    private JButton button; 
    private int a, b; 

    public PoseActionListener(JButton btn, int a, int b) { 
     this.button = btn; 
     this.a = a; 
     this.b = b; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     posePion(a, b, btn); 
    } 
} 

다음 :

button11.addActionListener(new PoseActionListener(button11, 1, 1); 
button12.addActionListener(new PoseActionListener(button12, 1, 2); 

또는 더 나은, 한 번에 모든 버튼을 만들 : 예를 들어

for (int i=1; i<=7; i++) { 
    for (int j=1; j<=7; j++) { 
     JButton btn = new JButton("Button " + i + ", " + j); 
     // store the button in an array if you want 
     btn.addActionListener(new PoseActionListener(btn, i, j); 
    } 
} 
+0

고마워, 이걸 시도해 보자. =) – user2057209

2

장소를 2 차원에 JButton의가, 7 × 7 배열은 생성 될 때.

그런 다음 수신기 메서드에서 루프를 반복하여 JButton을 클릭했는지 확인합니다. 루핑 색인은 PosePion에 전달할 항목을 결정하는 데 도움이됩니다.

+0

을 당신이, 알고 의미를 이해하는 방법 그것들을 배열에 넣을 수는 있지만 루프로 클릭 한 JButton과 그것을 PosePion에 전달하는 방법을 어떻게 결정합니까? – user2057209

1

Sun Java 코딩 규칙을 배우는 것이 좋습니다. 코드를 읽기가 어렵습니다.

모든 인스턴스가 아닌 개별 인스턴스마다 개별 ActionListener가 있다고 생각합니다.

데이터 구조와 명령 구현을 사용하여 어리석은 반복을 줄이는 것이 좋습니다.

+0

우리는 수업에서 이것을하는 법을 배우지 않고, 단지 하나의 행동 청취자를 구현하는 법을 안다. 그래서 나는 이것을 구현할 몇 가지 문제를 가지고있다. – user2057209

+0

수업에서 배우고 * 당신의 두뇌를 사용하고, 일반 copypasting을 수행하지 않습니다. – skuntsel

관련 문제