Bouton Java Swing ActionPerformed
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Bouton Java Swing ActionPerformed



  1. #1
    Ultimatom

    Bouton Java Swing ActionPerformed


    ------

    Bonjour,

    Voila, j'ai un problème concernant l'utilisation d'un bouton. Le but de mon programme est de lire l'appui du bouton pour tirer 3 cartes au hasard. Sauf que j'ai un problème. Quand je créée les 3 objets cartes dans le ActionPerformed je ne peux pas les utiliser dans le main. J'ai essayé de créer une fonction GetCarte() dans la classe ActionJouerBouton cela ne fonctionne pas et j'ai aussi essayé de mettre l'objet Carte en public cela ne fonctionne toujours pas. Alors comment je peux récupérer mes objets créer dans la fonction actionPerformed...
    Voici mon code :

    Code:
    		public class ActionJouerBouton implements ActionListener
    	{
    
    		public void actionPerformed(ActionEvent e)
    	    {
    			Carte Carte1J = new Carte();
    			Carte Carte2J = new Carte();
    			Carte Carte1C = new Carte();
    			
    			//Ajouter action qui suit le clic sur le bouton validation
    			Paquet jeuCartes = new Paquet();
    			jeuCartes.ajouteUnjeuComplet();
    
    			//Distribution des cartes par tirage aleatoire
    			Carte1J = jeuCartes.TirageCarte();
    			Carte2J = jeuCartes.TirageCarte();
    			Carte1C = jeuCartes.TirageCarte();
    	    }
    
    	}
    Voici mon main :

    Code:
    public class blackjackApp {
    
    	private JFrame frame;
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					blackjackApp window = new blackjackApp();
    					window.frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}	
    			}
    		});
    		
    		//tire un nombre aléatoire entier entre 0 et 51 compris
    		int x = (int)((Math.random() * (52 - 0)));
    		Carte Carte1J = new Carte();
    		Carte Carte2J = new Carte();
    		Carte Carte1C = new Carte();
    		Carte Carte2C = new Carte();
    
    public blackjackApp() {
    		initialize();
    	}
    
    	/**
    	 * Initialize the contents of the frame.
    	 */
    	private void initialize() {
    		
    		// initialisation de la fenetre principale
    		
    		frame = new JFrame();
    		frame.setBounds(0, 0, 450, 300);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//enlève la barre du haut de la fenetre (reduire,agrandir,fermer)
    		frame.setUndecorated(true);
    		//positionne la fenêtre au milieu de l'écran
    		//frame.setLocationRelativeTo(null);
    		//redimensionner la fenetre
    		Dimension dimension = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    		int height = (int)dimension.getHeight();
    		int width  = (int)dimension.getWidth();
    		frame.setSize(width,height);
    		frame.getContentPane().setLayout(null);
    		
    		
    		Button button = new Button("Jouer");
    		button.setBounds(900, 200, 100, 100);
    		frame.getContentPane().add(button);
    		button.addActionListener(new ActionJouerBouton());
                    }
    }
    J'ai simplifié le code parce qu'il est beaucoup plus long.
    Donc j'aimerai récupérer mes objets cartes dans mon main.. Avez vous une idée ?

    Merci de votre aide !

    -----

  2. #2
    Ikhar84
    Animateur Informatique

    Re : Bouton Java Swing ActionPerformed

    Salut.

    Vous avez utilisé le principe des variables globales:
    Code:
    private JFrame frame;
    Il suffit de déclarer les cartes juste en dessous (en private), je ne dis pas que c'est le meilleur moyen (pour les puristes), mais là elles seront accessibles dans tout le code...

    Il faudra ensuite les initialiser là ou vous les déclarez déjà dans le main, en remplacant:
    Code:
    Carte Carte1J = new Carte(); 
    Carte Carte2J = new Carte(); 
    Carte Carte1C = new Carte();
    Par:
    Code:
    Carte1J = new Carte(); 
    Carte2J = new Carte(); 
    Carte1C = new Carte();
    J'ai glissé Chef !

  3. #3
    pm42

    Re : Bouton Java Swing ActionPerformed

    Ben déjà ton code initialiser 2 fois chaque carte : 1 fois avec new, l'autre fois avec jeuCartes.TirageCarte().
    Ca ne sert à rien, seule la 2nde fois a du sens.

    Ensuite, si tu veux les récupérer dans ton main, tu les déclares static dans ta classe plutôt que locales à ta méthode actionPerformed.

    Cela reste une mauvaise idée : le code de ton main devrait être dans une méthode de ta classe, tes cartes dans des variables normales d'instance (pas static).
    Et ton main devrait simplement créer une instance de blackjackApp puis appeler une méthode "run" ou autre dessus.

    En gros, on ne met pas sa logique métier dans le main. Il se contente d'initialiser 1 objet (ou quelqu'uns) puis de leur transférer le contrôle.

  4. #4
    Ultimatom

    Re : Bouton Java Swing ActionPerformed

    Ce qui me dérange c'est que ces cartes appartiennent à la classe joueur, et que si aucun joueur n'existe, elles n'ont pas lieu d'exister.

  5. A voir en vidéo sur Futura
  6. #5
    Ultimatom

    Re : Bouton Java Swing ActionPerformed

    Je ne suis vraiment pas fan de les mettre en variable globale mais je n'ai pas compris l'autre solution que vous m'avez proposé. Par défaut quand je créée une application Window sur Swing, ca créée un fichier java avec ce code et le JFrame en variable global...

    Code:
    import java.awt.EventQueue;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    import java.awt.Dimension;
    import java.awt.Button;
    
    public class blackjackApp {
    
    	private JFrame frame;
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					blackjackApp window = new blackjackApp();
    					window.frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}	
    			}
    		});
    public blackjackApp() {
    		initialize();
    	}
    
    	/**
    	 * Initialize the contents of the frame.
    	 */
    	private void initialize() {
    		}
    Ce qui me dérange c'est que je souhaite agir avec des objets quand j'appui sur le bouton ce qui équivaut à écrire des mon code dans ActionPerformed, mais tous mes objets instancier dans le main ne sont pas dispo ici... alors comment puis je faire une liaison entre eux sans passer par des variables globales ?

  7. #6
    Ultimatom

    Re : Bouton Java Swing ActionPerformed

    C'est bon j'ai trouvé, il fallait mettre dans la classe bouton les objets que je souhaitais utilisé et faire un constructeur avec ces paramètres. Puis pour les utiliser dans le main faire une méthode get dans la classe bouton.

Discussions similaires

  1. Dessin d'un arc plein Swing Java
    Par electron22 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 16/07/2016, 15h01
  2. [Divers] branchement bouton marche arret laveur haute pression suroil swing
    Par edoardo974 dans le forum Dépannage
    Réponses: 3
    Dernier message: 04/09/2013, 15h28
  3. [JAVA swing] Problème avec des JPanel mis à la façon des Poupées Russes
    Par Aenonis dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 09/08/2013, 03h32
  4. Java Swing: setBounds
    Par martini_bird dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 15/02/2006, 20h41