質問

破壊も修復もおもしろくなるよう行動のリスナー Jbuttonなく、名前を指定できます。例えば、以下のループを生成するボタンをアルファベットの各文字.

for (int i = 65; i < 91; i++){
     alphabetPanel.add(new JButton("<html><center>" + (char)i));
}

があるので、とて追加する事ができますアクションリスナーそれぞれのボタンでなく私ためのループとして解各JButtonを作成アクションリスナー?

おかげさまで、事前に

Tomek

役に立ちましたか?

解決

ご質問は少し漠然とした.この些細な変更のループを追加するリスナー内側のループ:

ActionListener listener = something;

for (int i = 65; i < 91; i++){
     JButton button = new JButton("<html><center>" + (char)i);
     button.addActionListener( listener );
     alphabetPanel.add(button);
}

できない場合は変更のループが対して繰り返し処理を実行すべてのパネルの子どもたちは、追加リスナーに達するまでの子を養育するjbuttons.

でもなぜhtmlを中心にテキストを使うことができます。ことはできないので失わせないアイテム?なjbuttonが既にセンターテキストを使うことができます。
きsetHorizontalAlignement(SwingConstants.センター)なかなければならない。

他のヒント

これを行うことの問題は何ですか?

for (int i = 65; i < 91; i++){
     JButton button = new JButton("<html><center>" + (char)i));
     button.addActionListener( new ButtonListener());
     alphabetPanel.add(button);
}

...

class ButtonListener implements ActionListener {
     ButtonListener() {
     }
     public void actionPerformed(ActionEvent e) {
         //TODO:
     }
}

また、ボタンのテキストがボタンを識別しない場合、アルファベットの文字でボタンの名前を設定できます。

button.setName((char)i)); // or button.setName(i);

名前を付けると、ボタンインスタンスを直接のメソッドのローカル変数に格納することを意味しているように見えます。それを避けようとすると、コードが読みにくくなります。しかし、あなたの質問に答えるには:

最も明白な方法は、古いが新しく人気のある二重括弧イディオムを使用することです。

alphabetPanel.add(new JButton("<html><center>" + (char)i) {{
    addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            ...
        }
    });
}});

この場合、iはfinalではないため、匿名の内部クラスからは使用できません。別の(最終)変数に割り当てるか、ループを再定式化します。

別のルートは、アクションを経由することです。 (通常、アクションは、貧乏人のハッシュテーブルであるため、避けることをお勧めします。ButtonModelは「良い」ですが。)

alphabetPanel.add(new JButton(new AbstractAction("<html><center>" + (char)i) {
    public void actionPerformed(ActionEvent event) {
        ...
    }
}));

もちろん、アプリケーション固有のライブラリ方法があります:

Form alphabetForm = new Form(alphabetPanel);
for (char c='A'; c <= 'Z'; ++c) {
    alphabetForm.button("<html><center>" + c, new ActionListener() {
        public void actionPerformed(ActionEvent event) {
            ...
        }
    });
}

以下のような匿名コンポーネントにActionListenerを追加することができます:

new JButton().addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent arg0) {
                // TODO your action             
            }           
        });

ただし、パネルに匿名JButtonを追加しようとする場合、以下に示すように、JButtonのコンストラクターの代わりにaddActionListenerメソッドの戻り型(void)が使用されるため、このアプローチは機能しません。

for (int i = 65; i < 91; i++){
             alphabetPanel.add(new JButton("<html><center>" + (char)i).addActionListener(new ActionListener(){
                    @Override
                    public void actionPerformed(ActionEvent arg0) {
                        // TODO your action             
                    }           
                }));
        }

上記のコードは、panel.add()メソッドの無効な引数について文句を言います。

したがって、あなたの場合、JButtonの名前付きインスタンスを作成する必要があります。

これが明確になることを期待してください。

よろしく、 Suresh

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top