2010-05-25 3 views
0

J'ai plusieurs panneaux sur une fenêtre JFrame. Je vais remplir chaque panneau différemment à chaque fois. Par exemple: Je lance le GUI: (panneau du centre de l'image, panneau de droite, panneau du bas). Le panneau central est doté de 20 boutons, le panneau droit avec 10 boutons et le panneau inférieur avec 3.Java détecter les boutons cliqués

deuxième démarrage de l'interface graphique (même interface graphique). Le panneau central a 50 boutons, le panneau droit a 12 boutons, le fond a 3.

Donc, chaque fois qu'il y a un nombre aléatoire de boutons, impossible d'être tous nommés de façon unique. Étant donné que je n'ai pas de nom unique pour chaque bouton (juste une liste), j'aimerais savoir quels boutons ont été cliqués en fonction du panneau auquel ils appartiennent. est-ce possible? ActionEvent a une méthode getSource() qui sera la référence au bouton sur lequel vous avez cliqué.

+0

Pourquoi tant de boutons? Ça sent mauvais pour moi. Peut-être que si vous nous avez donné d'autres indices sur ce que vous essayez d'accomplir. Si les boutons sont suffisamment importants pour apparaître à l'écran, ils méritent probablement d'être nommés variables. – I82Much

Répondre

3

D'une certaine manière, les boutons sont en cours de création; Supposons que vous les numérotiez d'une manière que vous puissiez retrouver plus tard.

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.util.List; 
import java.util.ArrayList; 
import javax.swing.JButton; 


public class ButtonTest extends JFrame implements ActionListener { 

    public ButtonTest() { 
     super(); 
     initGUI(); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 
    } 

    private final List<JButton> buttons = new ArrayList<JButton>(); 
    private static final int NUM_BUTTONS = 20; 

    public void initGUI() { 
     JPanel panel = new JPanel(); 
     for (int i = 0; i < NUM_BUTTONS; i++) { 
      String label = "Button " + i; 
      JButton button = new JButton(label); 
      button.setActionCommand(label); 
      button.addActionListener(this); 
      buttons.add(button); 
      panel.add(button); 
     } 
     getContentPane().add(panel); 
    } 

    public static void main(String[] args) { 
     new ButtonTest(); 
    } 

    public void actionPerformed(ActionEvent e) { 
     String actionCommand = ((JButton) e.getSource()).getActionCommand(); 
     System.out.println("Action command for pressed button: " + actionCommand); 
     // Use the action command to determine which button was pressed 
    } 


} 
1

Vous pouvez ensuite vérifier la commande d'action du bouton si nécessaire.

1

Si vous voulez savoir quel panneau contient le bouton, essayez d'appeler le getParent() sur le JButton lui-même. Pour savoir sur quel bouton a été cliqué, comme le suggère camickr, utilisez getSource() sur ActionEvent.

Questions connexes