2011-09-04 21 views
5

Tengo 4 listas de botones dispuestos en columnas en mi programa. A partir de ahora tengo 4 bucles que verifican si se ha hecho clic en un botón o no. ¿Hay una manera simple de comprobar si se ha hecho clic en algún botón en lugar de recorrer cada lista para ver si se hizo clic en ese botón determinado? Debe haber una forma más fácil de verificar si "actionSource == anybutton" ...Oyente de acciones Java

Respuesta

20

usar clases internas anónimas para cada botón:

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

O si su lógica está relacionada, a continuación, puede compartir un oyente:

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 es una autoridad de Swing en mis ojos. – duffymo

+0

Comparte un oyente ... ¡Bien, gracias por el consejo! Eso funcionó perfectamente! – mbreen

1

Puede agregar un oyente individual para cada botón y un oyente común para cada botón. Programe el oyente común para responder a "cualquier botón presionado".

0

Cada vez que se hace clic en un botón, se activa el actionPerformed método, independientemente del botón que presionó.

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

Todavía tengo otro objeto con oyentes en ellos, como cuadros combinados y elementos de menú. Solo necesito los botones para hacer una determinada tarea, no todos los elementos con un oyente. – mbreen

+0

@mbreen Ver respuesta actualizada. – fireshadow52