2017-05-16 4 views
1

LayeredLayoutを使用して、TextAreaをTextAreaの右上隅にある小さなボタンでオーバーレイしています(このボタンは、手動テキスト入力の日付を簡単にするためにタイムスタンプを挿入するために使用されます)。LayeredLayoutでレイアウトされた2つのコンポーネントが両方のイベントを受信できるようにするにはどうすればよいですか?

ユーザーが「クリック」したときに小さなボタンがイベントを受け取るようにし、下のTextAreaをクリックしてテキストを手動で編集できるようにします。しかし、LayeredLayoutを使用すると、最後に追加されたコンポーネントだけがイベントを受け取ります。つまり、textAreaだけがアクティブで、小さなボタンを押すことができないか、ボタンを押すことができますが、ユーザーはTextAreaをクリックして編集を開始できません。説明が理解できるほど明確であることを願っています。

私が見る限り、他の既存のレイアウトはどれもこのケースに向いていません。これを達成する方法はありますか?

おかげさまで、ご意見やご提案をありがとうございます。

答えて

1

両方のイベントをクリックすると、このパターンが頻繁に使用されます。私はネイティブOS編集コードに代理人のポインタイベントを編集してから問題がある編集中にボタンを押すことを試みたと仮定しています。

参照:

Form current = new Form("TextAreaButton", BoxLayout.y()); 

TextArea ta = new TextArea("Text of Text Area"); 
ta.addActionListener(e -> Log.p("Text is: " + ta.getText())); 
Button b = new Button(""); 
b.addActionListener(e -> ta.setText("")); 
FontImage.setMaterialIcon(b, FontImage.MATERIAL_CLEAR); 
current.add(
     LayeredLayout.encloseIn(ta, 
       BorderLayout.east(b)) 
); 

current.show(); 
+0

(部分的に)私の悪いです。おそらく、ボタンをクリックすることができないため、textAreaを編集していたのですが、私は実験して、setFocusable(true)ボタンコンテナの文を追加しました。そして、私はトップレイヤーだけがイベントをつかむことを確認したこのページを見ました:http://stackoverflow.com/questions/25852251/codenameone-layered-layout。 – user1246562

+0

挑戦はまだあなたが編集を開始するとき、ボタンが効果がなくなるのは非常に悪い人間工学(直感的ではない)です。しかし、おそらく解決策は、TextAreaを短くしてボタンを外側に置き、両方をTextArea UIIDのコンテナに入れてボタンがTextArea内にあるようにすることです。私はそれを試みます。 – user1246562

+0

はい、有効な回避策です。テキスト入力はかなり特殊なケースです。私は、あなたのユースケースがエッジのXボタンであると仮定しています。これはプラットフォームによってアドレス指定されるべきであるため、ネイティブにコードネーム1に追加するRFEがあります。 –

関連する問題