2010-12-17 4 views
1

텍스트 필드에 티커 심볼을 입력하면 주가 차트를 호출하는 애플리케이션을 개발 중입니다. 또한 메뉴 항목을 선택하여이 차트를 특정 방식으로 수정하려고합니다.Java의 "중첩 된"ActionListeners?

소프트웨어 측면에서 ActionListeners 메뉴 항목을 상태 매개 변수 값으로 변경 한 다음 TextField ActionListener를 호출하여 차트를 다시 복사하는 것이 가장 쉽습니다.

다른 방법으로도이를 수행 할 수 있지만 다른 actionlistener에서 액션 리스너를 호출 할 수있는 방법이 있습니다. 컴파일러는 그 아이디어를 좋아하지 않습니다.

미리 감사드립니다.

class Controller { 
    ... // variable declarations etc 

    public Controller() { 
     textField.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) { 
      setStockSymbol(...); 
      replot(); 
     }}); 
     menuItem.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) { 
      setStatusParameter(...); 
      replot(); 
     }}); 
    } 

    private void replot() { 
     // Do whatever 
    } 
} 

이것은 replotting 부분을 요인 :

존 Doner

+0

코드 샘플을 게시 할 수 있습니까? –

+1

소리가 저에게 매우 나쁜 생각처럼 들립니다. –

+0

나쁜 생각이라고 말하면 적어도 제대로 작동 할 수 있도록 텍스트를 추가하십시오. –

답변

1

구독자와 게시자 모두 역할을하는 클래스를 만들려고합니다. 클래스에 ActionListener 인터페이스를 구현하게하고 클래스의 ActionListeners에 가입 할 수있는 방법을 제공하면됩니다.

public class MyActionSubPub 
{ 
    private List<ActionListener> downstreams = new ArrayList<ActionListener>(); 
    public MyActionSubPub(AbstractButton(or whatever) button) 
    { 
     button.addActionListener(this); 
    } 
    public addActionListener(ActionListener listener) 
    { 
     downstreams.add(listener); 
    } 
    public void actionPerformed(ActionEvent event) 
    { 
     ... do your stuff ... 
     ... loop through all downstreams, call actionPerformed on each... 
    } 
} 

다른 방법으로는, 하나 개의 클래스에 이벤트를 보냅니다가 반환 할 다음 다음 시간에 작업을 전송 대기 어댑터를 만들 수 있습니다.

+0

글쎄, 당신은 자바에 대한 나의 지식을 향상시켰다 : 이것은 내가 가질 수있는 것은 아무것도 아니다. 감사. –

2

한 가지 방법은이 예를 들어, ActionListeners "씬"을 확인하고 어딘가에 개인 방법에 위임해야하는 것입니다해야 할 일 ActionListeners에서. replot을 트리거하기 위해 다른 코드 경로가 필요하다면 이제는 구현하기가 쉽고 플로팅 코드는 매개 변수 업데이트 코드와 잘 분리됩니다.