CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Aide eclipse bouton

Shediir
Shediir
Niveau 64
28 mai 2016 à 16:20:47

Salut à tous, j'ai un projet à rendre bientot, et je n'arrives pas à afficher un bouton avec mon programme. Je dois réaliser un jeu taquin, j'ai deja les bases, qui sont de pouvoir bouger les cases en fonction des clics, et de placer les images aux cases amovible. J'ai regardé comment placer un bouton, sauf que quand j'exécute mon programme, rien ne se passe.

Programme main :
package BaseProjet; public class Main { public static void main(String[] args){ //----------------------------------------// // DEFINITION DES CARACTERISTIQUES DU JEU // //----------------------------------------// int Largeur = 3; // NOMBRE DE CASE EN LARGEUR int Hauteur = 3; // NOMBRE DE CASE EN HAUTEUR int Taille = 220; // TAILLE EN PIXEL D'UNE CASE //------------------------// // CREATION D'UNE FENETRE // //------------------------// Fenetre FenJeu=new Fenetre("Taquin",Largeur,Hauteur,Taille); Fenetre FenImage=new Fenetre("Image",Largeur,Hauteur,Taille); //---------------------------------------// // CREATION D'UN PANNEAU DANS LA FENETRE // //---------------------------------------// new Affichage(FenJeu,Largeur,Hauteur,Taille); new Image(FenImage,Largeur,Hauteur,Taille); //---------------------------// // RENDRE LA FENETRE VISIBLE // //---------------------------// FenJeu.setVisible(true); FenImage.setVisible(true); } }

Programme bouton :

package BaseProjet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Bouton extends JFrame{
	  
	private static final long serialVersionUID = 1L;
	private JPanel pan = new JPanel();
	  private JButton bouton = new JButton("Mélanger");

	  public Bouton(){
	    this.setTitle("Animation");
	    this.setSize(300, 150);
	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	    this.setLocationRelativeTo(null);
	    //Ajout du bouton à notre content pane
	    pan.add(bouton);
	    this.setContentPane(pan);
	    this.setVisible(true);
	  }       
	}

merci d'avance !

Benekiki
Benekiki
Niveau 10
28 mai 2016 à 16:42:08

Ben dans le main tu n'instancie jamais de fenêtre Bouton, forcément
( et c'est voulu le fait d'ouvrir une nouvelle fenêtre pour afficher un bouton... ? )

rajoute
Bouton nouveauBtn = new Bouton();
dans le main

tu ferais mieux d'afficher une seule JFrame (fenêtre) pour tout ton jeu et y coller plusieurs panels, tu peux utiliser window builder comme plugin pour faciliter le placement des composants sur une JFrame ou une JPanel :

https://eclipse.org/windowbuilder/

Message édité le 28 mai 2016 à 16:43:40 par Benekiki
Shediir
Shediir
Niveau 64
28 mai 2016 à 16:43:32

Ah merci ca marche !

Shediir
Shediir
Niveau 64
28 mai 2016 à 16:47:04

T'en fait pas, je fais juste un petit truc, mais pour etre sur, ce bouton serai capable de commander des autres programme si je fais appel à lui dans des sous programmes ?

Benekiki
Benekiki
Niveau 10
28 mai 2016 à 16:54:50

Des autres programmes, tu veux dire des autres classes ?
Pour accéder à une classe d'une autre classe, tu la passe en paramètre à la première, par exemple si tu veux que ton bouton appelle une méthode de la classe Main :

Dans le main :

Bouton nouveauBtn = new Bouton(this);

Classe Bouton :

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Bouton extends JFrame implements ActionListener
{
	private static final long serialVersionUID = 1L;
	private JPanel pan = new JPanel();
	private JButton bouton = new JButton("Mélanger");
	Main main;
	
	public Bouton(Main parMain)
	{
		main = parMain;
		//On passe en paramètre une classe Main à l'instanciation
		this.setTitle("Animation");
		this.setSize(300, 150);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setLocationRelativeTo(null);
		//Ajout du bouton à notre content pane
		pan.add(bouton);
		this.setContentPane(pan);
		this.setVisible(true);
	}
	//Methode pour l interface ActionListener 
	@Override
	public void actionPerformed(ActionEvent parEvt) 
	{
                //Si la source de l'action est le bouton, on execute la methode dans ta classe main
		if(parEvt.getSource() == bouton)
			main.taMethodeDeTaClasseMain();
	}
}
Message édité le 28 mai 2016 à 16:58:49 par Benekiki
Shediir
Shediir
Niveau 64
28 mai 2016 à 17:03:15

Oui je parlais bien des autres class,
Donc si j'ai bien compris les lignes permettant de faire appel au bouton serai :
public void actionPerformed(ActionEvent parEvt) { if(parEvt.getSource() == bouton) main.taMethodeDeTaClasseMain();

Parce que je dois trouver un codage qui me permettrais de mélanger le jeu. Pour t'expliquer rapidement, j'ai des images associé à des cases, (3x3 avec une case vide pour les déplacements ) et je dois ajouter une fonction mélanger pour commencer le jeu, sauf que j'ai aucune idée de par ou commencer, je te montre le programme qui gère l'affichage et donc les cases, si jamais tu a le temps de m'aider :


package BaseProjet;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class Affichage extends JPanel implements MouseMotionListener, MouseListener, KeyListener  {

	//------------------------------------------//
	//    			ATTRIBUS 					//
	//------------------------------------------//
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private int l,h,t;			//	NOMBRE DE CASES EN LARGEUR ET HAUTEUR ET TAILLE
	private int x=2,y=2;			//	POSITION DU PERSONNAGE DANS LE TABLEAU
	private int[][] c;			//	TABLEAU
	private int xm;				//	ABSCISSE DU CLICK
	private int ym;				//	ORDONNEE DU CLICK
	private boolean click;		//	ETAT DU CLICK
    private Color LesCouleurs[]=new Color[10];		// 10 ELEMENTS
	//------------------------------------------//
	//   	CONSTRUCTEUR DE L'AFFICHAGE			//
	//------------------------------------------//
	
public Affichage(Fenetre UneFenetre, int largeur, int hauteur, int taille) {
	
	// INITIALISATION DES CARACTERISTIQUES DU JEU
	
	this.l=largeur;
	this.h=largeur;	
	this.t=taille;	
	this.c=new int[l][h];
	
	// NUMEROTER LES CASES

	for (int j=0;j<this.h;j++)
		for (int i=0;i<this.h;i++)
			this.c[i][j]=3*j+i+1;
	
	//------------------------------------------//
	//      COULEUR DES ELEMENTS DU JEU         //
	//------------------------------------------//	
	Random randomGenerator = new Random();

	LesCouleurs[0]=new Color(0,0,0);
	
	for (int i=1;i<this.h*this.l;i++)
		LesCouleurs[i]=new Color(2*randomGenerator.nextInt(100),
    							2*randomGenerator.nextInt(100),
    							2*randomGenerator.nextInt(100));
	

	
	// ASSOCIER CE PANNEAU A LA FENETRE
	
	UneFenetre.setContentPane(this); 
	
	// ECOUTER LA SOURIS ET LA CLAVIER
	
	addMouseMotionListener(this);
	addMouseListener(this);
	setFocusable(true);
}
	
public void paintComponent(Graphics g){
    
    super.paintComponent(g);

	
	//---------------------------------------------//
	//      REALISER UN DEPLACEMENT SI CLICK       //
	//---------------------------------------------//
	
	if (this.click) Deplacement(Gestion());
	
	// CONSOLE POUR VERIFICATION
	
	System.out.println();		
	for (int j=0;j<this.h;j++){
		for (int i=0;i<this.h;i++)
			System.out.print(this.c[i][j]+" ");
		System.out.println();
	}
		
	//-----------------------------------------------//
	// AFFICHAGE DU JEU SUR CONSOLE ET SUR GRAPHIQUE //
	//-----------------------------------------------//
	
	//System.out.println();
	//System.out.println("Affichage du tableau ci-dessous:");
	//System.out.println();

	/*for (int j=0;j<this.h;j++){
		for (int i=0;i<this.h;i++){
			g.setColor(LesCouleurs[this.c[i][j]]);
			g.fillRect(i*this.t, j*this.t, this.t, this.t);
		}
	}*/
	
	ImageIcon image[] = new ImageIcon[10];	
	for (int i=0;i<10;i++)
		image[i] = new ImageIcon ("0"+i+".jpg") ;
	
	for (int j=0;j<this.h;j++)
		for (int i=0;i<this.h;i++)
			if (c[i][j]!=9)
				g.drawImage (image[c[i][j]].getImage(),i*this.t, j*this.t,this.t, this.t, null);

		
	


	

  }    

private int Gestion() {
	
	//-----------------------------------------//
	// COMPARER LES COORDONNEES DE LA SOURIS   //
	// ET CELLE DU PERSONNAGE PUIS RETOURNER   //
	// UNE COMMANDE CLAVIER EN CONSEQUENCE     //
	//-----------------------------------------//	
	
	int commande = 0;
	
	if (this.xm==this.x+1 && this.ym==this.y) commande =  39; // DROITE
	if (this.ym==this.y+1 && this.xm==this.x) commande =  40; // BAS
	if (this.xm==this.x-1 && this.ym==this.y) commande =  37; // GAUCHE
	if (this.ym==this.y-1 && this.xm==this.x) commande =  38; // HAUT
		

	return commande; // PAS DE DEPLACEMENT
}

private void Deplacement(int code) {
	
	// MEMORISER LES COORDONNEES DU PERSONNAGE
	
	int xold=this.x;
	int yold=this.y;
	
	// MODIFIER LES COORDONNEES DU PERSONNAGE SI CELA EST POSSIBLE
	
	if (code==37 && this.x!=0) this.x--;
	if (code==38 && this.y!=0) this.y--;
	if (code==39 && this.x!=l-1) this.x++;
	if (code==40 && this.y!=h-1) this.y++;
	
	
	System.out.println(c[xold][yold]+"<->"+c[this.x][this.y]);
	
	int mem = c[this.x][this.y];
	
	c[this.x][this.y]=c[xold][yold];
	
	c[xold][yold]=mem;
	
	
	
	
}

public static void temporisation(int tempo)
{
	try
	{
		Thread.sleep( tempo ) ;
	} 
	catch (InterruptedException e) 
	{
		e.printStackTrace();
	}
}

public void keyPressed(KeyEvent e) {
	
	
	// REPEINDRE LE JEU
	
	repaint();
	}

/*Action de MouseMotionListener */ 	

public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseDragged( MouseEvent e ) {}
public void mouseClicked(MouseEvent e) {
	//-----------------------------------------//
	// RECUPERER LES COORDONNEES DE LA SOURIS  //
	//-----------------------------------------//
	 xm=e.getX()/this.t;
	 ym=e.getY()/this.t;;
	 
	 click = true;
	 repaint();
}
public void mouseMoved(MouseEvent e){}

@Override
public void keyReleased(KeyEvent e) {
	// TODO Auto-generated method stub
	
}

@Override
public void keyTyped(KeyEvent e) {
	// TODO Auto-generated method stub
	
}

}
Benekiki
Benekiki
Niveau 10
28 mai 2016 à 17:13:57

Oui tu vois tu as déja MouseListener, KeyListener etc... Pour récupérer l'action sur un composant c'est Actionlistener, oublie pas de l'implémenter en haut (tu le rajoute à la suite des implements x...)

Puis comme tu as dit tu rajoutes la méthode dans la classe :


public void actionPerformed(ActionEvent parEvt)
{
    if(parEvt.getSource() == nomdubouton)
    {
       System.out.println("Le bouton a été cliqué");
    }
}

Pour récupérer la source de l'action, tu fais parEvt.getSource(); donc pour vérifier que ça vient du bon bouton tu fais if(parEvt.getSource() == lenomdubouton) ...

Attention si ton bouton est dans une classe et que tu veux interagir avec une autre classe il faut la passer en paramètre du constructeur comme je t'ai montré au dessus

Message édité le 28 mai 2016 à 17:14:53 par Benekiki
Shediir
Shediir
Niveau 64
28 mai 2016 à 17:15:48

Ok merci beaucoup pour ton aide

Shediir
Shediir
Niveau 64
28 mai 2016 à 17:19:44

Juste une dernière question, comment mettre le action listener ? parce que j'ai essayé de l'implémenter, sauf que ca m'a mis une erreur, j'ai donc essayer de rajouter une ligne importe etc actionlistener comme mouselistener, et ca me metre toujours une erreur : Actionlistener cannot be resolved to a type

Au temps pour moi, il suffisait de mettre une majuscule au L, sauf que maintenant j'ai une erreur sur affichage : The type Affichage must implement the inherited abstract method ActionListener.actionPerformed(ActionEvent)

Message édité le 28 mai 2016 à 17:20:50 par Shediir
Benekiki
Benekiki
Niveau 10
28 mai 2016 à 17:28:43

En français ça donne il faut implémenter la méthode blablabla, c'est celle juste au dessus regarde voir

Shediir
Shediir
Niveau 64
28 mai 2016 à 19:18:40

Excuse moi j'ai du m'absenter, je dois les placer ou ces lignes de codes :

public void actionPerformed(ActionEvent parEvt)
{
    if(parEvt.getSource() == nomdubouton)
    {
       System.out.println("Le bouton a été cliqué");
    }
}
Benekiki
Benekiki
Niveau 10
28 mai 2016 à 19:59:06

dans la classe du bouton, je te l'ai donnée au dessus et c'est déja dans le code

Shediir
Shediir
Niveau 64
29 mai 2016 à 12:17:17

Yep j'ai réussis merci, sinon par hasard, tu saurais pas comment généré des clilcs aléatoire en x et en y pour mélanger le taquin ?

Benekiki
Benekiki
Niveau 10
29 mai 2016 à 12:40:03

J'ai pas très bien compris, mais tu peux simuler la pression sur un bouton avec
tonBoutton.doClick();

Si tu peux poster un screen de ton programme et me dire ou cliquer ça serait mieux

Message édité le 29 mai 2016 à 12:40:27 par Benekiki
Shediir
Shediir
Niveau 64
29 mai 2016 à 13:36:47

https://image.noelshack.com/fichiers/2016/21/1464521772-sans-titre.png
Voila, la fenetre du milieu c'est le jeu, et faut cliquer sur des cases aléatoirement pour le mélanger

Benekiki
Benekiki
Niveau 10
29 mai 2016 à 14:16:06

Tu pourrais faire une boucle qui génère un nombre entre 37 et 40 et à chaque tour cela envoie la commande associée ?

for(int i=0; i<20; i++)
{
    int commande = random.nextInt(40 - 37 + 1) + 37;
    //tu fais ta fonction qui bouge le taquin en fonction du numéro de la commande ici
}

J'ai pas compris tout ton code mais si chaque chiffre entre 37 et 40 correspond à gauche droite haut et bas alors tu devrais pouvoir faire quelque chose, ici ça enverrais une série de 20 touches aléatoires, il faut que tu rajoutes le code qui bouge le taquin en fonction de la commande dans la variable commande à la place de mon commentaire

Message édité le 29 mai 2016 à 14:16:25 par Benekiki
Shediir
Shediir
Niveau 64
29 mai 2016 à 14:25:05

j'ai essayer de le placer, mais ca me met cette erreur sur : random.nextInt
erreur : random cannot be resolved

Benekiki
Benekiki
Niveau 10
29 mai 2016 à 14:27:08

for(int i=0; i<20; i++)
{
    Random random = new Random();
    int commande = random.nextInt(40 - 37 + 1) + 37;
    //tu fais ta fonction qui bouge le taquin en fonction du numéro de la commande ici
}
Shediir
Shediir
Niveau 64
29 mai 2016 à 14:28:48

package BaseProjet;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Bouton extends JFrame {
  private JButton button1  = new JButton("Bouton");
  public static void main(String[] args) {
    new Bouton();
  }
  public Bouton() {
    this.setSize(275, 100);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    ClickListener cl = new ClickListener();

    button1.addActionListener(cl);
    button1.doClick();

    this.add(button1);

    this.setVisible(true);
  }

  private class ClickListener implements ActionListener {
    public void actionPerformed(ActionEvent e) {
       button1.setText("Mélanger");
    
       for(int i=0; i<20; i++)
       {
           Random random = new Random();
           int commande = random.nextInt(40 - 37 + 1) + 37;
           //tu fais ta fonction qui bouge le taquin en fonction du numéro de la commande ici
       }
  }
}}

Je l'ai mis ici, mais ca fait rien, je dois le mettre autre part ?

Benekiki
Benekiki
Niveau 10
29 mai 2016 à 14:29:55

Mais c'est normal que ça fasse rien je t'ai bien écrit
"il faut que tu rajoutes le code qui bouge le taquin en fonction de la commande dans la variable commande à la place de mon commentaire"
Faut te débrouiller un peu, pas copier coller bêtement, essaye de comprendre le code...
Si tu comprends pas pourquoi ça fait rien je sais pas comment tu as fait le reste

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment