2012-12-09 13 views
5

Bir grup düğüme ActionListener eklemek istiyorum. Düğmeleri sarmış herhangi bir sınıf var mı? GroupJButtons veya daha genel bir nesne grubu gibi bir şey mi? Bu yüzden hepsine ActionListener kurabilirim. Sonuçta, hangi tuşlara basıldığımı umursamıyorum. Sadece metnini değiştirmek istiyorum, tek yapmam gereken şey onu JButton'a çevirmek ve metni değiştirmek.Birçok JButtons için bir ActionListener

Tüm işlem 1 veya 2 kod satırlarını azaltacaktır (bir döngü kullanmanız durumunda) ancak mantıklı olarak daha iyi olduğu için bunu yapmak istiyorum.

+2

Birçok düğmeleri * tam * aynı şeyi olan bir çok sıradışı GUI. Kullanım çantası nedir? –

cevap

7

işlemek için .

class MyAction extends AbstractAction { 
     public MyAction(String text, ImageIcon icon, 
        String desc, Integer mnemonic) { 
     super(text, icon); 
     putValue(SHORT_DESCRIPTION, desc); 
     putValue(MNEMONIC_KEY, mnemonic); 
    } 
    public void actionPerformed(ActionEvent e) { 
     //do the action of the button here 
    } 
    } 

Sonra aynı şey yapabilirsiniz olmasını istediğiniz her düğme için:

Action myAction = new MyAction("button Text", anImage, "Tooltip Text", KeyEvent.VK_A); 
button = new JButton(myAction); 
+0

Çok güzel bir çözüm! Ama biraz aşırı değil mi? sadece bir grup düğme için? –

+2

@Arno: Bana aşırı öldürücü gelmiyor. İyi cevap için 1+. Tüm düğmelerde aynı metin ve eylem varsa, bir MyAction nesnesi oluşturabilir ve çok sayıda düğme oluşturmak için kullanabilirsiniz. Şimdi, düğmelerin farklı başlıkları varsa, bunun yerine birkaç düğüme eklenen bir ActionListener oluşturmanız gerekebilir. –

+0

@HovercraftFullOfEels Tamam, bunu bilmek güzel! –

4

Eğer AbstractAction sınıfını genişletmek ve sadece çok düğmelere aynı eylemi uygulayabilir Her düğme

private JButton createButton(String title, ActionListener al) { 
    JButton button = new JButton(title); 
    button.addActionListener(al); 
    return button; 
} 

oluşturmak için kullanabilir Ve bu durumda eylemi

public void actionPerformed (ActionEvent ae) { 
    JButton button = (JButton)ae.getSource(); 
    button.setText("Wherever you want"); 
}