2017-03-07 12 views
1

I 이상한 점이 있습니다. CN1에 코딩 실수 나 버그가 있는지 확실하지 않습니다.CodenameOne에서 확인란이 선택되지 않고 선택되어 나타나는 이유는 무엇입니까?

기본적으로 CheckBox 객체의 행을 만들고이를 X 스크롤 가능 컨테이너에 넣습니다. 선택되지 않은 항목 하나를 클릭하고 "신축성있는"효과가 되돌아 올 때까지 드래그하면 선택되어있는 것처럼 보이지만 코드는 선택한대로 기록하지 않습니다. 선택되지 않은 경우 콘솔 출력에 단어 '선택'이 필드가 선택되었을 때 대문자와 소문자된다 https://youtu.be/EtputE1kjyo

참고 :

는 문제의 다음 비디오를 참조하십시오. 포커스와 동일합니다. 포커스를 선택 오류에 대해 비난하지 않도록 setFocusable()이 원하는대로 작동하는지 확인하기 위해 출력에 포커스를 추가했습니다.

cb = new CheckBox(getCacheableImageMaxHeight(mod.getIconFile(),moduleImageHeight)); 
cb.setName(mod.getModuleID()); 
cb.setToggle(true); 
cb.setUIID("ModuleButton"); 
cb.setFocusable(false); 
cb.setScrollVisible(false); 
cb.setTextPosition(Component.BOTTOM); 
cb.setCloudDestinationProperty(cb.getName()); 

//actionlistener added for debugging only 
final CheckBox cbFinal = cb; 
final String modName = mod.getDisplayName(); 
cb.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent evt) { 
     System.out.println(modName+", "+(cbFinal.isSelected()?"SELECTED":"selected") + ", " + (cbFinal.hasFocus()?"FOCUS":"focus")); 
    } 
}); 
c.addComponent(cb); 

UPDATE : 여기

은 체크 박스 생성 코드의 내가 깨달은이 "주"가 전쟁에서 여기 : toggleButtons (나는 지금 내가 있기 때문에 그냥 체크 박스를 아니에요 실현 set "setToggle (true))는"elastic "효과로 끌고 놓을 때"눌린 "상태에 머물러 있습니다."눌린 "상태와"selected "상태가 같은 모양이므로 내 사용자가 드래그 작업 중 "눌려진"상태 일 때 뭔가를 선택했습니다.

여기 디버깅이 좀 더 있습니다.
Pressed AND Selected!

  • 제 버튼을 눌렀지만, (버그)을 선택하지 않는다.
  • 두 번째 단추는 정상적으로 선택되어 있으며 버그를 표시하지 않습니다.
  • 세 번째 버튼은 내가 선택한 후 드래그하여 놓아서 선택되고 눌러지기 때문에 흥미 롭습니다!

그래서에 대한 질문 변경 : 이미 (누름 상태가 버튼 출시 이후에 내동댕이)이 상황에 오픈 버그가 있습니다 그렇다면, 앞으로 수정 또는 현재에 대한 해결 방법이 있습니까?

+0

'CheckBox'가'ToggleButton'의 역할을하도록 설정되어 있고 스크롤을 위해 드래그하여 드래그하면 너무 길게 머물러 있기 때문에 생각합니다. – Diamond

답변

0

그래서 나는

나는 이벤트를 캡처하는 데 필요한 (버튼 선택이있을 수 있기 때문에 누르면, 그리고 버그를 누르면 선택 +) 별도의 프레스 스타일을 추가 포함하지 않는보다 효과적인 해결 방법을 알아 냈어 그 스크롤을 멈추고 단추의 상태를 확인하여 아무 것도 누르지 않았는지 확인하십시오. 이렇게하려면 스크롤 컨테이너에 addPointerReleasedListener을 사용하여 포인터가 벗어 났을 때 (즉 해당 구성 요소가 확실히 더 이상 눌러지지 않음) 감지 한 다음 Runnable에 각 포인터가 해제되었는지 확인합니다.

scrollingContainer.addPointerReleasedListener(evt -> { 
    Container cont = (Container) evt.getComponent(); 
    Iterator<Component> buttons = cont.iterator(); 
    while (buttons.hasNext()){ 
     Button button = (Button) buttons.next(); 
     if (button.getState() == Button.STATE_PRESSED) { 
      button.released(); 
     } 
    } 
}); 

지금까지 문제를 해결하는 것으로 보입니다.이제 우리는 영구적 인 수정이나 ToggleButtons의 문서에 스크롤 컨테이너에있을 때 눌려진 상태로 고정되어 해제되어야한다는 메모가 필요합니다.

0

선택한 상태를 눌린 상태와 다르게 보이게하면 제대로 작동합니다.

터치 장치에서 손가락을 올렸을 때 선택된 상태가 렌더링되지 않습니다. Display에서 플래그를 변경하거나 일부 비밀 테마를 일정하게 설정하지 않는 한 거의 항상 사실입니다.

+0

아마도 해결 방법이라고 생각 하겠지만 아마도 "눌려진"모양을 "선택되지 않은"모양으로 만들어야 혼란스럽지 않게됩니다 (일부 요소는 선택되어 보이고 다른 요소는 혼란스럽게 보일 것입니다 ...). 그렇다면 뭔가가 눌려 졌을 때 사용자에게 시각적 인 피드백이 없다는 것을 의미합니다. 내가 게시 할 수있는 자체 해결 방법을 발견했지만 실제로 버그로 간주되어 해결 될 것으로 기대하고 있습니다 ... 추가해야합니까? 프로젝트 버그? –

+0

아니요. 다른 방법입니다. 눌러 진 모양이 있어야하며, 선택한 것은 해석하기가 더 쉽습니다. 여기에 버그가 있는지 잘 모르겠습니다. –

+0

내 의견으로는, 버그는 손가락을 뗀 후에도 버튼이 여전히 눌려진 상태라는 것입니다. 그게 버그가 아니라면 그 행동을 언제 사용하는지 이해할 수있게 도와 주시겠습니까? 어쩌면 토글 버튼을 잘못 사용하려고하는 것일까 요? –