2012-12-09 7 views
5

Ich möchte eine ActionListener zu einer Gruppe von Schaltflächen hinzufügen. Gibt es eine Klasse, die die Schaltflächen umschließt? Etwas wie GroupJButtons oder etwas allgemeiner Gruppe von Objekten? also kann ich allen einen ActionListener zuweisen. Schließlich ist es mir egal, welche Tasten gedrückt werden. Ich will nur seinen Text ändern, also muss ich ihn nur auf JButton umwandeln und den Text ändern.Ein ActionListener für viele JButtons

Der gesamte Prozess würde die Codezeilen in 1 oder 2 (wenn Sie eine Schleife verwenden) reduzieren, aber ich möchte das tun, da es logisch besser klingt.

+2

Es ist eine sehr ungewöhnliche GUI, die viele Tasten tun * genau * die gleiche Sache hat. Was ist der Anwendungsfall? –

Antwort

7

In diesem Fall bearbeiten können Sie die Abstract Klasse erweitern und einfach die gleiche Aktion viele Tasten anwenden .

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

dann für jede Taste, die Sie das gleiche, was Sie können passieren soll:

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

Sehr schöne Lösung! Aber scheint es nicht ein bisschen übertrieben zu sein? nur für eine Gruppe von Tasten? –

+2

@Arno: Es scheint mir nicht über-töten. 1+ für die gute Antwort. Sie könnten ein MyAction-Objekt erstellen und es verwenden, um viele Schaltflächen zu erstellen, wenn alle Schaltflächen denselben Text und dieselbe Aktion haben. Wenn die Schaltflächen nun andere Titel haben, müssen Sie möglicherweise stattdessen einen ActionListener erstellen, der dann zu mehreren Schaltflächen hinzugefügt wird. –

+0

@HovercraftFullOfEels Ok, gut zu wissen! –

4

diese Weise können Sie jede Taste

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

zu schaffen und diese die Aktion

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