2013-06-14 12 views
5

Ciao sto cercando di attuare ascoltatore azione per JButton e il codice di apparire come segue:JButton immagine di sfondo

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

Utilizzando il JButton sopra si guarda bene See the image below for button 1

quando aggiungo valore specifico al tasto per esempio

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); 

E 'simile al seguente immagine

Check button 1

C'è un modo posso evitare questo e impostare il valore troppo.

Grazie per il vostro aiuto in anticipo.

+1

Perché si vuole impostare l'etichetta se non vuoi mostrarlo comunque? (Temo che tu voglia gestire il clic in base al nome del pulsante, ma non è questa la strada da percorrere.) –

+0

@Heuster voglio ottenere quel valore e usarlo sul listener di azioni. Ho anche un codice diverso per l'ascoltatore di azioni, se vuoi posso pubblicarlo anche io. grazie – usrNotFound

+0

Sono d'accordo con Heuster. Invece di utilizzare il testo dell'etichetta JButton per modificare l'azione, creare un ActionListener personalizzato per ciascun pulsante e incorporare il valore specifico del pulsante in ActionListener. Il testo dell'etichetta è a scopo di visualizzazione grafica e non è inteso per l'uso come handle di oggetto. – Bobulous

risposta

5

Personalmente, sarei usando il Action API.

Consente di definire una gerarchia di comandi di azione (se questo è ciò che si desidera) e di definire una risposta autonoma ai comandi.

Si potrebbe ...

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

allora si sarebbe semplicemente utilizzare con il tasto ...

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

Per esempio ...

4

Invece di determinare il pulsante cliccato nell'ascoltatore azione, vorrei utilizzare un modello di adattatore:

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

dove handleClick può ancora essere il gestore per tutti i pulsanti.

3

Voglio ottenere quel valore e usarlo sull'ascoltatore di azioni.

si utilizza il comando di azione per questo:

one.setActionCommand("1"); 

Tuttavia è meglio utilizzare il testo effettivo che si desidera inserire nella componente di visualizzazione. Poi si può condividere l'ActionListener su tutti i pulsanti che utilizzando il codice come:

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

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

Grazie amico sei la leggenda. – usrNotFound