私の問題:私はオブジェクトの動的なリストを持っています(それは何エレクタが含まれるかわかりません)。私はそれぞれのボタンが必要であり、各ボタンはアイテムが選択されたことを「教えて」いる必要があります。私はチェックボックスやラジオボタンを使いたいとは思っていません(そして、それらがオブジェクトを格納/返すことができないことを知っている限り)。私の解決策は次のとおりです。JButtonをJButtonであるItemButtonにサブクラス化します私の商品を保管するフィールドがあります。このようにして、リスナーに添付されているリスナーでreturnItemメソッドを呼び出すだけで、選択したアイテムを使用できる状態にします。私のボタンのリストを生成ボタンプロパティの情報を取得するためにJButtonをサブクラス化する
class toolButton extends JButton {
toolButton(String name, int i) {
super(name);
this.index = i;
}
public int getSelectionIndex() {
return this.index;
}
private int index;
}
方法:
public void showItemList(ArrayList<Item> arrayList) {
for (int i = 0; i < arrayList.size(); i++) {
toolButton but = new toolButton(arrayList.get(i).getName()", i); //getName() returns the name of the Item to be displayed
this.add(but);
but.addMouseListener(new MouseAdapter() {
// Simple anonymous class for the listener
public void mousePressed(MouseEvent e) {
selected = but.getSelectionIndex(); //This sets the index number in the class that uses this method
}
});
}
}
それは私が、少なくともやっている何のために、働く
これは内部クラスです。しかし、より良い方法があるかどうか疑問に思っていました。もしそれがalthogerに惑わされないならば、これは少なくとも受け入れられます。私は、この場合には大いに役立つかもしれないactionEventに対してgetSource()を使用するとは思わない。どれくらいの数があるのかわからないので、各ボタンのリスナーを実際に書くことはできません。
編集: 私がモデル化しようとしているのは、シンプルなディスペンサーです。ディスペンサーにはアイテムのコレクションがあります(それぞれに名前と価格があります)。ディスペンサクラスは、メソッド「バイ(アイテムアイテム)」を有する。だから私がしたいのは、ボタンをディスペンサー内の利用可能なアイテムそれぞれを表すようにすることです。ボタンが押されたとき、アイテムの参照がメソッドbuy(アイテム)に渡されるようにします(ボタンは呼び出す必要はありません買い(アイテム)メソッド自体)。 私はあなたが理解していると確信しているので、これはクラスの練習なので、要件を変更することはできません。
1. JButtonの適切なイベントハンドラは通常、but.addActionListener(新しいアクション(...))のようにActionListenerになります。2.タイプ名は大文字の3から始める必要があります。あなたが解決策を書いている要件を記述することができました。私たちは、それらに取り組む適切な方法についてより良い助言を与えることができました。 – rexford
あなたの解決策は問題ありません。これはデコレータパターンの実装です。 https://en.m.wikipedia.org/wiki/Decorator_pattern – Tinman
@Tinmanあなたのご意見ありがとうございました、パターンをまだ勉強していない、私はそれについて読むでしょう! – Paul