2013-06-14 18 views
5

Hallo Ich versuche, Action-Listener für JButton und Code aussehen wie folgt umzusetzen:JButton Hintergrundbild

ImageIcon imageForOne = new ImageIcon(getClass().getResource("resources//one.png")); 
one = new JButton("",imageForOne); 
one.setPreferredSize(new Dimension(78, 76)); 
one.addActionListener(myButtonHandler); 

Unter Verwendung der oben JButton es sieht gut aus See the image below for button 1

Wenn ich hinzufügen bestimmten Wert Taste für z.B.

ImageIcon imageForOne = new ImageIcon(getClass().getResource("resources//one.png")); 
//Check this 
one = new JButton("one",imageForOne); 
one.setPreferredSize(new Dimension(78, 76)); 
one.addActionListener(myButtonHandler); 

Es sieht wie folgt aus Bild

Check button 1

Gibt es eine Möglichkeit, dies zu vermeiden und den Wert setzen.

Vielen Dank für Ihre Hilfe im Voraus.

+1

Warum wollen Sie das Etikett setzen wenn Sie es trotzdem nicht anzeigen wollen? (Ich befürchte, dass Sie den Klick basierend auf dem Namen der Schaltfläche behandeln möchten, aber das ist nicht der richtige Weg.) –

+0

@Heuster Ich möchte diesen Wert erhalten und ihn für den Action-Listener verwenden. Ich habe auch einen anderen Code für Action-Listener, wenn du willst, dass ich das auch posten kann. danke – usrNotFound

+0

Ich stimme Heuster zu. Erstellen Sie für jede Schaltfläche einen benutzerdefinierten ActionListener und binden Sie den buttonspezifischen Wert in den ActionListener ein, anstatt den JButton-Beschriftungstext zum Ändern der Aktion zu verwenden. Der Beschriftungstext dient zur grafischen Anzeige und ist nicht zur Verwendung als Objektkennung gedacht. – Bobulous

Antwort

5

Ich persönlich würde die Action API werden.

Es ermöglicht Ihnen, eine Hierarchie von Aktionsbefehlen zu definieren (wenn Sie das möchten) und eine in sich geschlossene Antwort auf die Befehle zu definieren.

Sie könnten ...

public class OneAction extends AbstractAction { 
    public OneAction() { 
     ImageIcon imageForOne = new ImageIcon(getClass().getResource("resources//one.png")); 
     putValue(LARGE_ICON_KEY, imageForOne); 
    } 

    public void actionPerfomed(ActionEvent evt) { 
     // Action for button 1 
    } 
} 

Dann würden Sie einfach mit Ihrer Schaltfläche ...

one = new JButton(new OneAction()); 
one.setPreferredSize(new Dimension(78, 76)); 

Zum Beispiel ...

4

Statt die Taste zur Bestimmung der Aktion Hörer geklickt haben, würde ich einen Adapter Muster verwenden:

one.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent arg0) { 
     handleClick("one"); 
    }   
}); 

wo handleClick noch der Handler für alle Tasten sein.

3

Ich möchte diesen Wert erhalten und es auf Aktion Listener verwenden.

Sie verwenden die Aktion Befehl:

one.setActionCommand("1"); 

Allerdings ist es besser, den eigentlichen Text zu verwenden, die Sie in Ihre Anzeigekomponente einfügen möchten. Dann können Sie die Action auf alles, was Sie Tasten teilen, indem sie mithilfe von Code wie:

ActionListener clicked = new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     String text = e.getActionCommand() 
     // displayComponent.appendText(text); 
    }   
}; 

one.addActionListener(clicked); 
two.addActionListener(clicked); 
+0

Danke Kumpel du bist die Legende. – usrNotFound