2014-01-27 2 views
1

나는 MultiButton을 동적으로 추가했으며 각각은 새로운 ActionListener을 가지고 있습니다. ActionListenerComponent이라면 실제로는 MultiButton 개체가 아닙니다. 즉, 멀티 버튼에 캐스트하면 ClassCastExceptionButton에서 MultiButton으로 변환 할 수 없습니다.ActionEvent 구성 요소의 유형이 잘못 되었습니까?

대신 MultiButton을 얻을 수있는 방법이 있습니까? 아니면 바보 같은 짓을 한거야?

코드 : 당신이 codenameone의 멀티 버튼의 소스를 보면,이 방법 볼 수

Container cBob = findContainerBob(f); 

cBob.removeAll(); 

for (String str : things) { 
    MultiButton mb = new MultiButton(); 
    mb.setTextLine1(str); 

    mb.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
      MultiButton clickedMb = (MultiButton)evt.getComponent(); // Throws exception     
     });   

    cBob.addComponent(mb); 
} 
+2

, 당신은'null' 가치를 얻을하지 않습니다 - 당신은'ClassCastException'를 얻을 : 은 사용해야 가능한 멀티로 버튼을 얻을 수 있습니다. 따라서 귀하의 설명이 이해가되지 않아 귀하를 도울 수 없습니다. –

+0

오. 예. 나는 그것을 의미했다. 질문이 업데이트되었습니다. 개인 기억 장치 오류 : 실제로 금요일에 쓰기 시작한 질문이었고, 정확한 증상을 잘못 기억했습니다! - 아직도 일반적인 문제는 여전히 동일합니다 - 왜 그것이 잘못된 유형입니까? – noelicus

+0

정확한 'MultiButton'은 무엇입니까? 그것은 표준 구성 요소가 아닙니다 –

답변

2

http://code.google.com/p/codenameone/source/browse/trunk/CodenameOne/src/com/codename1/components/MultiButton.java?r=317

:

/** 
* Adds an action listener 
* 
* @param al the action listener 
*/ 
public void addActionListener(ActionListener al) { 
    emblem.addActionListener(al); 
} 

상징 인 구성원 및 선언 버튼 :

private Button emblem = new Button(); 

evt.getComponent() 호출로 얻는 구성 요소는 실제로 버튼입니다.

업데이트 : 잘못된 형식으로 캐스팅하면

MultiButton multiButton = (MultiButton) evt.getComponent().getParent().getLeadParent(); 
+0

아, 알겠습니다. 그래서 반환 된 구성 요소의 부모로 가서 다중 버튼으로 * 멀티탭을 가져 와서 멀티 버튼을 얻을 수 있습니다.하지만 항상 그렇게 작동하는 것에 의존 할 수는 있습니다. – noelicus

+0

맞아, 나는 이것도 발견하고 내 대답을 편집했다. –

+0

좋은 답변입니다! 그 이유는 리드 구성 요소가 호환성을 갖춘 일반 버튼처럼 작동하도록하기 위해서입니다. 다음을 사용할 수 있습니다. MultiButton clickedMb = (MultiButton) evt.getComponent(). getParent(). getLeadParent(); –

관련 문제