2016-09-08 4 views
1

j'ai pu créer environ 11 JButton dans un cercle en utilisant ce code ......Désactivation DButton après le premier clic

public class Beginner extends JPanel { 
     private JButton quest; 
     public Beginner() { 

        int n = 10; //no of JButtons 
        int radius = 200; 
        Point center = new Point (250, 250); 

        double angle = Math.toRadians(360/n); 

        List <Point> points = new ArrayList<Point>(); 

        points.add(center); 

        for (int i = 0; i < n; i++) { 
         double theta = i * angle; 

         int dx = (int) (radius * Math.sin(theta)); 

         int dy = (int) (radius * Math.cos(theta)); 

         Point p = new Point (center.x + dx , center.y + dy); 
         points.add(p); 
        } 

        draw (points);      
        } 
        public void draw (List<Point> points) { 

         JPanel panels = new JPanel(); 

         SpringLayout spring = new SpringLayout(); 
         int count = 1; 
         for (Point point: points) { 

          quest = new JButton("Question " + count); //JButton is drawn about 10 times in a circle arragement 
          quest.setForeground(Color.BLUE); 
          Font fonte = new Font("Script MT Bold", Font.PLAIN, 20); 
          quest.setFont(fonte); 
          add (quest); 
          count++; 
          ; 
          spring.putConstraint(SpringLayout.WEST, quest, point.x, SpringLayout.WEST, panels); 

          spring.putConstraint(SpringLayout.NORTH, quest, point.y, SpringLayout.NORTH, panels); 

          setLayout(spring); 

          panels.setOpaque(false); 
          panels.setVisible(true); 
          panels.setLocation(10, 10); 

          add(panels); 
} 
} 
} 

Maintenant, je dois créer un actionListener pour chaque JButton, et il est chaque bouton devrait être actif seulement pour un clic, après quoi il change sa couleur en vert !, je n'ai aucune idée sur la façon de le faire! Merci de votre aide!

+1

Copie possible de [Désactiver le bouton sur click befor actionPerformed est concurrencé java] (http://stackoverflow.com/questions/17807846/disable-button-on-click-befor-actionperformed-is-competed-java) –

Répondre

1

Vous devez ajouter un écouteur pour tous les boutons:

MÉTHODE 1:

quest.addActionListener(new ActionListener(){ 
      @Override 
      public void actionPerformed(ActionEvent e) { 
        JButton source = (JButton) e.getSource(); 
        source.setEnabled(false); 
        source.setBackground(Color.GREEN); 
      } 
    }); 

MÉTHODE 2:

quest.addActionListener(new DisableButtonActionListener()); 

      ... 

    private class DisableButtonActionListener implements ActionListener { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
         JButton source = (JButton) e.getSource(); 
         source.setEnabled(false); 
         source.setBackground(Color.GREEN); 
       } 
    } 

MÉTHODE 3 (mon choix personnel):

Beginner implements ActionListener { 

      @Override 
      public void actionPerformed(ActionEvent e) { 
        JButton source = (JButton) e.getSource(); 
        source.setEnabled(false); 
        source.setBackground(Color.GREEN); 
      } 

      ... 

      quest.addActionListener(this); 

} 
+0

Merci beaucoup! Je suis reconnaissant!! –

+0

Le premier a très bien fonctionné, mais je garderai toujours le deuxième en vue, ne l'ai pas essayé tho! .... Mais merci encore! –

+0

Ces 3 font la même chose, ils sont simplement écrits différemment. – Damiano

1

Dans l'écouteur d'action du bouton essayer de le faire:

button.setEnabled(false); 

Il devrait fonctionner.

+0

Nope! ... Cela le généraliserait et désactiverait le dernier bouton ....... pas le bouton sélectionné !! –