2017-03-07 76 views
1

我有一個奇怪的問題 - 不確定是否存在編碼錯誤或CN1中的錯誤。在CodenameOne中,爲什麼複選框未選中,但出現選中?

基本上我創建了一行CheckBox對象,並將它們放在一個X-Scrollable容器中。如果我點擊一個未選定的項目並拖動,直到「彈性」效果將其拉回,它似乎被選中,但代碼不會將其記錄爲選定項目。

請參閱問題的以下視頻: 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); 

更新:我已經意識到有兩個「國家」的戰爭在這裏: 的的ToggleButtons(我現在認識到他們不是僅僅的CheckBox,因爲我set「setToggle(true))會被拖拽到」按下「狀態,因爲它們是通過」彈性「效果拖動和釋放的。不幸的是,」按下「和」選定「狀態具有相同的外觀,這意味着我的用戶認爲他們已經選擇了一些東西,只是在拖動操作過程中被卡住「按下」。

這是我做的更多調試。
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

在我看來,這個錯誤是在拿起我的手指後,按鈕仍處於按下狀態。如果這不是一個錯誤,你能幫我理解我什麼時候使用這種行爲?也許我試圖錯誤地使用切換按鈕? –

相關問題