2011-09-04 14 views
5

Ho 4 elenchi di pulsanti disposti in colonna nel mio programma. A partire da ora ho 4 loop che controllano se un pulsante è stato cliccato o meno. C'è un modo semplice per verificare se è stato fatto clic su un pulsante invece di scorrere attraverso ogni elenco per vedere se quel determinato pulsante è stato cliccato. Ci deve essere un modo più semplice per verificare se "actionSource == anybutton" ...Listener di azioni Java

risposta

20

Utilizzare le classi interne anonime per ogni pulsante:

JButton button = new JButton("Do Something"); 
button.addActionListener(new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     System.out.println("Do Something Clicked"); 
    } 
}); 

Oppure, se la logica è legata, quindi è possibile condividere un ascoltatore:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ButtonCalculator extends JFrame implements ActionListener 
{ 
    private JButton[] buttons; 
    private JTextField display; 

    public ButtonCalculator() 
    { 
     display = new JTextField(); 
     display.setEditable(false); 
     display.setHorizontalAlignment(JTextField.RIGHT); 

     JPanel buttonPanel = new JPanel(); 
     buttonPanel.setLayout(new GridLayout(0, 5)); 
     buttons = new JButton[10]; 

     for (int i = 0; i < buttons.length; i++) 
     { 
      String text = String.valueOf(i); 
      JButton button = new JButton(text); 
      button.addActionListener(this); 
      button.setMnemonic(text.charAt(0)); 
      buttons[i] = button; 
      buttonPanel.add(button); 
     } 

     getContentPane().add(display, BorderLayout.NORTH); 
     getContentPane().add(buttonPanel, BorderLayout.SOUTH); 
     setResizable(false); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
     JButton source = (JButton)e.getSource(); 
     display.replaceSelection(source.getActionCommand()); 
    } 

    public static void main(String[] args) 
    { 
     UIManager.put("Button.margin", new Insets(10, 10, 10, 10)); 
     ButtonCalculator frame = new ButtonCalculator(); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+1

Camickr è un'autorità Swing nei miei occhi. – duffymo

+0

Condividi un ascoltatore ... bello, grazie per il consiglio! Ha funzionato perfettamente! – mbreen

1

È possibile aggiungere un singolo listener per ciascun pulsante e un listener comune a ogni pulsante. Programmare l'ascoltatore comune per rispondere a "qualsiasi pulsante premuto".

0

Ogni volta che si fa clic su un pulsante, si innesca la Metodo actionPerformed, indipendentemente dal pulsante premuto.

public void actionPerformed(ActionEvent event) { 
    Object source = event.getSource(); 
    if (source instanceof JButton) System.out.println("You clicked a button!"); 
} 
+0

Ho ancora altri oggetti con gli ascoltatori su di essi, come caselle combinate e voci di menu. Ho bisogno solo dei pulsanti per eseguire un determinato compito, non tutti gli elementi con un listener. – mbreen

+0

@mbreen Vedi risposta aggiornata. – fireshadow52

Problemi correlati