私の質問はです。リストコンポーネント内にボタンのようなコンポーネントを追加することは可能ですか (ボタンはクリックされたときにトリガーされる機能を持っています)?
この画像は、私が参照していることをよりよく説明しています:
http://2.bp.blogspot.com/-HThpKcgDyRA/URI_FdpffMI/AAAAAAAAAUI/SficZAPXaCw/s1600/1.png
私の質問はです。リストコンポーネント内にボタンのようなコンポーネントを追加することは可能ですか (ボタンはクリックされたときにトリガーされる機能を持っています)?
この画像は、私が参照していることをよりよく説明しています:
http://2.bp.blogspot.com/-HThpKcgDyRA/URI_FdpffMI/AAAAAAAAAUI/SficZAPXaCw/s1600/1.png
はい、ただし、ハンドコーディングが必要であり、タッチでのみ機能します (フォーカスを割り当てることができないため)。
通常、これらのケースでは、リストを処理するのではなく、コンポーネント/コンテナー階層を使用することをお勧めしますが、これが常に実用的であるとは限りません。
重要なのは、常にリスト アクション リスナーを使用してイベントをトリガーすることです。したがって、リストのアクション処理コードにいるときは、ボタンによってトリガーされたかどうかを知りたいと思うでしょう...
GUI ビルダーを使用している場合、これは非常に簡単です。
Button b = ((GenericListCellRenderer)list.getRenderer()).extractLastClickedComponent();
if(b != null && b == myButton) {
// your event code here for the button, the selected entry is list.getSelectedItem()/Index()
}
ハンドコーディングされたアプローチは、extractLastClickedComponent メソッドがないという 1 つの大きな注意点を除いて、かなり似ています。したがって、レンダラー内にコンポーネントがあると仮定すると、それにアクション リスナーを追加するだけです。アクションリスナー内でフラグを設定するだけです。
myButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
buttonWasClicked = true;
}
});
// within the list listener we do the exact same thing:
if(buttonWasClicked) {
// for next time...
buttonWasClicked = false;
// your event code here for the button, the selected entry is list.getSelectedItem()/Index()
}
はい!!!試してみてください、これはとても簡単です:....
http://www.codenameone.com/how-do-i---create-a-list-of-items-the-easy-way.html
http://www.codenameone.com/how-do-i---create-a-list-of-items-the-hard-way-gui-builder-renderer.html