2017-07-21 42 views
1

這裏是代碼示例來面對我的問題。Codename One - 有沒有辦法避免點擊時更改Button的UIID?

Container master, content; 
Button lockButton; 
void layout() { 
    master = new Container (new LayeredLayout()); 
    content = new Container (BoxLayout.y()); 
    content.setScrollableY (true); 
    lockButton = new Button (""); 
    lockButton.setUIID ("ButtonInvisible"); 
    lockButton.addActionListener ((e)->{ 
     unlock(); 
    }); 
    master.add(content); 
} 
void lock() { 
    master.add(lockButton); 
} 
void unlock() { 
    lockButton.remove(); 
} 

ButtonInvisible 選擇未被選擇按壓樣式是相等的。

問題描述:

  1. 滾動content向下
  2. 調用lock()
  3. 點擊contentlockButton截距點擊)
  4. 當按下指針content的滾動是0,上釋放,它返回到之前的金額。

我想這會發生,因爲按鈕更改它是單擊樣式,這會導致重新繪製/重新驗證基礎內容的錯誤。

根據鑽石的回答

信息更新:

集裝箱masterSwipeableContainer中心部分。

無論何時打開SwipeableContainer,都會調用方法lock()

如果我調用revalidate()SwipeableContainer打開 - 屏幕奇怪地閃爍,但行爲沒有改變 - 每當按下按鈕滾動仍然跳轉到零。

也許是顯著 - 有集裝箱content

Tabs組件在此版本的代碼重新確認的不能是這種問題的一個原因,因爲沒有組件添加或移除,但問題仍然是相同的。

Container master, content; 
Button lockButton; 
void layout() { 
    master = new Container (new LayeredLayout()); 
    content = new Container (BoxLayout.y()); 
    content.setScrollableY (true); 
    lockButton = new Button (""); 
    lockButton.setUIID ("ButtonInvisible"); 
    lockButton.addActionListener ((e)->{ 
     unlock(); 
    }); 
    lockButton.setFocusable(false); 
    master.add(content).add(lockButton); 
} 
void lock() { 
    lockButton.setFocusable(true); 
} 
void unlock() { 
    swipeableContainer.close(); 
    lockButton.setFocusable(false); 
} 
+0

我發現這個問題很難從描述中理解。但是這裏有幾件事我可以說。按鈕不會更改UIID。樣式更改不會重新驗證或影響滾動。一些截圖或視頻可以用來解釋什麼很快解釋 –

+0

感謝您的關注,我會盡可能快地提供視頻。 –

+0

這件事只發生在模擬器上,在設備上一切都很完美。抱歉。 –

回答

2

的問題是,當你調用lock()重新確認沒有發生,從而lockButton沒有正確擺出來,這只是正常,當你點擊master容器的任何部分定位(滾動不適用)。

解決的辦法是在主要的用戶界面改變之後總是調用repaint()/revalidate()或某種動畫,比如在容器中添加和移除組件。

Container master, content; 
Button lockButton; 
void layout() { 
    master = new Container (new LayeredLayout()); 
    content = new Container (BoxLayout.y()); 
    content.setScrollableY (true); 
    lockButton = new Button (""); 
    lockButton.setUIID ("ButtonInvisible"); 
    lockButton.addActionListener ((e)->{ 
     unlock(); 
    }); 
    master.add(content); 
    master.revalidate(); 
} 
void lock() { 
    master.add(lockButton); 
    master.revalidate(); 
} 
void unlock() { 
    lockButton.remove(); 
    master.revalidate(); 
} 
+0

請檢查我的更改。 –

0

這隻發生在模擬器中。在真實的設備上,一切都很好。抱歉。

相關問題