2017-03-07 9 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); 

UPDATE:私はここに戦争における2つの「状態」がありますが実現しました: トグルボタンが(私は今、彼らは私ので、ちょうどチェックボックスじゃない実現します残念ながら、 "押した"状態と "選択した"状態は同じ外観をしているので、私のユーザは自分が考えていることを意味します。setToggle(true)は、ドラッグ操作中に「押されて」いるだけで何かを選択しました。

ここで私がやったいくつかのデバッグがあります。
Pressed AND Selected!

  • 最初のボタンが押されたが、(バグ)が選択されていません。
  • 2番目のボタンが正常に選択され、バグが表示されません。
  • 3番目のボタンは興味深いですが、それを選択してからドラッグして放して、選択されて押し出されるようにしました。

のでへの質問の変更:はすでに(押された状態は、ボタンが解放された後に立ち往生)このような状況のためのオープンなバグがありそうであれば、今後の修正や、今の回避策はありますか?

+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

バグは、私の意見では、指を離した後、ボタンはまだ押された状態にあるということです。それがバグでない場合は、その行動をいつ使うのか理解してもらえますか?たぶん私はトグルボタンを間違って使用しようとしているのでしょうか? –

関連する問題