2012-12-09 13 views
5

Chciałbym dodać ActionListener do grupy przycisków. Czy istnieje jakaś klasa, która owija przyciski? Coś jak GroupJButtons lub coś bardziej ogólnie grupa obiektów? więc mogę ustawić dla nich wszystkie ActionListener. W końcu nie obchodzi mnie, które przyciski są przyciśnięte, chcę tylko zmienić jego tekst, więc wszystko, co muszę zrobić, to przesłać go do JButton i zmienić tekst.Jedna ActionListener dla wielu JButtonów

Cały proces zmniejszyłby linie kodu w 1 lub 2 (w przypadku korzystania z pętli), ale chcę to zrobić, ponieważ brzmi logicznie lepiej.

+2

Jest to bardzo nietypowe GUI, który ma wiele przycisków zrobić dokładnie do tego samego. Jaki jest przypadek użycia? –

Odpowiedz

7

W tym przypadku można rozszerzyć klasę AbstractAction i po prostu zastosować tę samą akcję do wielu przycisków .

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 
    } 
    } 

Następnie dla każdego przycisku, który chcesz to samo wydarzy można:

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

Bardzo ładne rozwiązanie! Ale czy nie wydaje się to trochę przesadą? tylko dla grupy przycisków? –

+2

@Arno: nie wydaje mi się, żeby mnie zabił. 1+ za dobrą odpowiedź. Możesz utworzyć jeden obiekt MyAction i użyć go do utworzenia wielu przycisków, jeśli wszystkie przyciski będą miały ten sam tekst i akcję. Teraz, jeśli przyciski będą miały różne tytuły, może być konieczne utworzenie jednego ActionListener, który następnie zostanie dodany do kilku przycisków. –

+0

@HovercraftFullOfEels Ok, dobrze o tym wiedzieć! –

4

Można to wykorzystać, aby stworzyć każdy przycisk

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

I to przetworzyć działania

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