2012-10-03 3 views
0

각 텍스트 필드에서 작업 수신기를 확인하십시오. 나는 많은 테스트를 수행했으며 액션 리스너를 추가하는 것이 문제가 아니라는 것을 발견했습니다. 문제는 어딘가 아래 코드에 있습니다. 왜냐하면 상위 4 개의 텍스트 필드에 hello 창이 나타나지만 확인에는 나타나지 않기 때문입니다. 하지만 아래쪽에있는 ok 창과 hello 창이 나타납니다. 나는 무엇을 잘못 했는가?자바에서 적절한 조치를 취하는 데 도움이 필요합니다.

public class handler implements ActionListener 
{ 
    public void actionPerformed(ActionEvent event) 
    { 
     if (event.getSource() == text) 
     { 
      JOptionPane.showMessageDialog(null, "ok"); 
     } 
     else if (event.getSource() == text1) 
     { 
      JOptionPane.showMessageDialog(null, "ok"); 
     } 
     else if (event.getSource() == text2) 
     { 
      JOptionPane.showMessageDialog(null, "ok"); 
     } 
     else if (event.getSource() == text3) 
     { 
      JOptionPane.showMessageDialog(null, "ok"); 
     } 
     else if (event.getSource() == text4) 
     { 
      JOptionPane.showMessageDialog(null, "ok"); 
     } 
     JOptionPane.showMessageDialog(null, "hello"); 
    } 
} 
+4

'=='대신'.equals (...) '를 사용 해보고 예상되는 행동은 정확히 무엇입니까? –

답변

1

당신이 타격있어 문제는 당신이 얕은 비교하고있는 것입니다 : 따라서

event.getSource() == textX 

을, 당신은 당신의 경우 - 다른 사람의 조건 중 하나를 충족하지하고 "확인"을 볼 수 없습니다 text1 ... text4 대화 상자.

여러 텍스트 필드에 대해 단일 ActionListener를 사용하고 이벤트 소스 (이벤트가 발생한 텍스트 필드)를 기반으로 동작을 차별화하려는 것처럼 보입니다.

각 텍스트 필드마다 ActionListener 구현을 만드는 것이 좋습니다.

일반적으로 익명 클래스로 내 ActionListeners를 작성하므로 이벤트 발생시 특정 필드에 대해 원하는 것을 사용자 정의 할 수 있지만 응용 프로그램에서 클래스를 확장 할 필요는 없습니다.

+0

정말 고마워요! 나는 그것에 잠시 머물렀다. – Squirvin

관련 문제