2014-12-03 6 views
0

이 메소드에는 MouseEvent가 들어 있습니다. idu 변수를 반환하려면 어떻게해야합니까? 그것은 메소드의 메소드 또는 호출하는 메소드와 비슷하며 idu 변수를 반환하는 방법을 이해할 수 없습니다.값을 리턴 할 때의 문제점 java

public int getId() { 
    int idu; 
    table.addMouseListener(new MouseAdapter() { 
     public void mouseClicked(MouseEvent e) { 
      if (e.getClickCount() == 1) { 
      JTable target = (JTable)e.getSource(); 
      int row = target.getSelectedRow(); 
      Object record = data[row][0]; 
      idu = (Integer) record;     
     } 
    } 
    }); 
return idu; 
} 
+2

비동기 프로그래밍 작동 방식에 대한 근본적인 오해가있는 것처럼 보입니다. – Mysticial

답변

1

거의 모든 경우에 'listener'패턴은 리턴 값이없는 메소드로 리스너를 등록하는 것과 관련이 있습니다. 일반적으로 리스너의 반환 값은 호출자에게 반환 할 값이 무엇인지에 대한 컨텍스트가 없으므로 의미가 없습니다.

내가 게시 한 코드에 몇 가지 오해가 있습니다. 1. getter 메소드에서 리스너를 등록하는 것은 거의 의미가 없습니다. 청취자는 일반적으로 클래스의 생성자 에 등록해야합니다. 2. 청취자 등록은 자체적으로 아무 작업도 수행하지 않습니다. 이벤트가 발생할 때 (이 경우 마우스 클릭) 처리기에 메소드를 호출하도록 지시합니다. 3. 리스너를 여러 곳에서 재사용하지 않는 한 (익명의 클래스이기 때문에이 코드 조각에 포함되지 않음) 이벤트 소스를 가져올 필요가 없습니다. 이미 이벤트 소스에 멤버 필드가 있어야합니다. 수업.

귀하의 경우에 대한 대답은 귀하의 JTable이 귀하의 클래스의 회원 필드 여야한다는 것입니다. 그런 다음 getId 메소드는 테이블의 선택된 행만 반환하면됩니다. JTable로 선택된 행이 추가 작업없이 사용 가능하므로 마우스 수신기를 등록 할 필요가 없습니다.

0

다음과 같은 질문에 대해 생각해 :

때 사용하기위한 준비 idu 값을 갖도록 기대 - 사용자가 테이블 위에서 마우스 버튼을 클릭하면 방법 getId()가 실행을 완료 할 때 또는?

코드가 실제로하는 일은 알람을 설정하거나 나중을 위해 작업을 예약하는 것과 같은 일종의 이벤트 리스너를 등록한 다음 잠자기로 돌아가거나 지금해야 할 다른 작업을 수행하는 것입니다.

코드 메서드를 종료 할 때 idu 값이 필요하지 않습니다. 이유는 메서드의 코드가 아직 실행되지 않았기 때문입니다. 이벤트이 실제로 발생하는 경우에만 실행됩니다.

관련 문제