Sudoku gui

Signaler
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009
-
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009
-
Bonjour à tous,
Voilà je dois faire un sudoku en GUI, j'aurais voulu savoir quel composant vous me conseilleriez pour la case (du plateau).
J'avais pensé à des JTextArea mais je n'arrive pas à implémenter le ActionListener.actionPErformed

voilà merci de m'éclairer
Marc
A voir également:

32 réponses

Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
Salut,





avec la moultitude de suoku qu'il y a sur ce site tu doit pouvoir trouver ton bonheur

WORA
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

j' ai testé avec de JButton mais je n arrive pas a affiche en gridlayout les possibilité dedans si quelqu' un sait comment faire
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
pour info



"JTextArea mais je n'arrive pas à implémenter le ActionListener.actionPErformed"



normal ca n'existe pas regarde du coté des key events

WORA
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
ou mouse clicked

WORA
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

voila j'ai regardé sur le site mais je ne trouve pas mon bonheur en fait je dois pouvoir mettre mes possibilité dans la case en gridlayout (3,3)
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
Salut,



comment ca tu ne trouve pas ton bonheur ?



c'est un truc du gout que tu veux faire?



import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;



import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;





public class Test extends JFrame implements ActionListener{

private static final long serialVersionUID = -1570645570118871214L;



//pour faire ton grid layout 3*3

private static final int MAX_PAR_GRILLE = 3;

//pour remplir completement le gridlayout

private static final int MAX_BUTTON = MAX_PAR_GRILLE*MAX_PAR_GRILLE;



//creation des boutons

private JButton buttons [] = new JButton[MAX_BUTTON];



//creation du panel qui va contenir les boutons avec un GridLayout 3*3

private JPanel paneGrid = new JPanel(new GridLayout(MAX_PAR_GRILLE, MAX_PAR_GRILLE));



public Test(){

super("Test grid layout");

setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(300, 300);

setLocationRelativeTo(null);



for(int i = 0; i < buttons.length; i++){

//instanciation des boutons

buttons[i] = new JButton(""+(i+1));

//ajout d'un listener

buttons[i].addActionListener(this);

//ajout du bouton i dans la panel

paneGrid.add(buttons[i], null);

}

//ajout du panel comme etant le panel principal

setContentPane(paneGrid);

}



public void actionPerformed(ActionEvent e) {

Object src = e.getSource();

//n'est pas franchement utile ici mais pourrait l'etre si tu avais

//plusieurs composant different rataché au meme listener

if(src instanceof JButton)

//juste pour afficher un truc

JOptionPane.showMessageDialog(this,


"Click sur le bouton " +


((JButton)src).getText(), "Information",
JOptionPane.INFORMATION_MESSAGE);





}



public static void main(String [] args){

new Test().setVisible(true);

}

}

WORA
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

je me suis mal exrpimé en fait c'est dans mes cases de ma grille de sudoku que je dois pouvoir mettre mes possibilités en gridlayout le panel des chiffres c'est déjà fait en fait
en tout cas merci de me consacrer un peu de ton temps
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
Juste une idée comme ca tu as essayé de le faire avec un tooltip?

genre l'user passe sur la grille avec la souri et tu toi affiche un tableau dans le tooltip exemple



button.setTooltipText("<html>\"+

\"----
1, 2, 3, \"+

\"----
4, 5, 6, \"+

\"----
7, 7, 9, \"+
</html>");



sinon je ne vois pas tres bien ce que tu veux dire

WORA
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

la consigne d'affichage est la suivanteb :

dans chaque case : on doit vavoir une grille de 9entier (3sur 3) .Cela voudrit dire qu ma case doit etre un conteneur et non un composant ... . donc l'idée du bouton servant de case n'est plus possible ... .
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
reste avec des panels dans ce cas tu te prendra moins le choux

WORA
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

dans ce cas comment je peux faire pour écrire dans le panel alors
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
Bon le centrage du text rest a voir mais j'ai la fleme de faire un effort :)

sinon le principe est la donc voici comment tu pourrais faire



import java.awt.Color;

import java.awt.Dimension;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.GridLayout;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;



import javax.swing.BorderFactory;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.SwingUtilities;





public class Frame extends JFrame implements MouseListener{



private static final long serialVersionUID = -5151041547543472432L;



// pour faire ton grid layout 3*3

private static final int MAX_PAR_GRILLE = 3;

//pour remplir completement le gridlayout

private static final int MAX_BUTTON = MAX_PAR_GRILLE*MAX_PAR_GRILLE;



private MyButton buttons [] = new MyButton[MAX_BUTTON];



// creation du panel qui va contenir les boutons avec un GridLayout 3*3

private JPanel paneGrid = new JPanel(new GridLayout(MAX_PAR_GRILLE, MAX_PAR_GRILLE));





public static void main(String [] args){

new Frame().setVisible(true);

}



public Frame(){

super("Test Panel bouton");

setDefaultCloseOperation(EXIT_ON_CLOSE);

setSize(new Dimension(300, 300));

setLocationRelativeTo(null);

for(int i = 0; i < buttons.length; i++){

//instanciation des boutons

buttons[i] = new MyButton(""+(i+1));

//ajout d'un listener

buttons[i].addMouseListener(this);

//ajout du bouton i dans la panel

paneGrid.add(buttons[i], null);

}

setContentPane(paneGrid);

}



public void mouseClicked(MouseEvent e) {

Object src = e.getSource();

//n'est pas franchement utile ici mais pourrait l'etre si tu avais

//plusieurs composant different rataché au meme listener

if(src instanceof MyButton)

//juste pour afficher un truc

JOptionPane.showMessageDialog(this,


"Click sur le bouton " +


((MyButton)src).getText(), "Information",
JOptionPane.INFORMATION_MESSAGE);

}



public void mousePressed(MouseEvent e) { }

public void mouseReleased(MouseEvent e) { }

public void mouseEntered(MouseEvent e) { }

public void mouseExited(MouseEvent e) { }





//la classe panel

private class MyButton extends JPanel{

private static final long serialVersionUID = 9189552538485123178L;



private String text = "";



public MyButton(String text){

super();

this.text = text;

//juste pour marquer les boutons

setBorder(BorderFactory.createEtchedBorder());

}



public String getText(){

return text;

}





public void paintComponent(Graphics g){

super.paintComponent(g);

Graphics2D g2 = (Graphics2D)g;



g2.setColor(Color.BLACK);

//récupération de la largeur du texte

int strW = SwingUtilities.computeStringWidth(g2.getFontMetrics(g2



.getFont()), getTitle());

//recuperation de la hauteur du texte

int x = getSize().width - strW /2;

int y = getSize().height /2 ;

//dessin de la chaine

g2.drawString(text, x, y);

}



}

}

WORA
Messages postés
7
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
8 octobre 2006

Salut,
si ca peut t aider, j'ai posté une source sudoku,
essaye de voir si tu y trouves quelquechose
d interessant.
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

merci pour votre aide j'ai trouvé grâce aui cardlayout
mais j'ai un autre problème :
j'ai utilisé des boutonet implémenté une classe EcouteSouris
mais je voudrais que quand je clic droit sur le bouton mon texte se mettent dedans avc des affichage j'ai pu voir qu'il ne détectait pas mon clic droit le gauche pas de stress mais le droit ne va pas pourtant j'ai bien implémenté mais deux bouton je pense

Encore merci pour votre aide
Marc
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

voilà le code ca sera peut être plus facil avec ca ;
package vue_gui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


public class Case implements ActionListener
{
private CardLayout pile;
private int [] tabcase = new int [9];
private int nbf;
int i;
private int test = 0 ; // 0 si possibilités affihce et 1 si case final
public JPanel jp;
public JButton b;
public JTextArea jt;
static int vales=0; //valeur mis a jour par ecoutesouris
JButton tab [];
public Case ()
{
EcouteSouris ec= new EcouteSouris();
JPanel cartepos= new JPanel();
JPanel cartes= new JPanel();
pile = new CardLayout();
jp = new JPanel();
jp.setLayout(pile);
tab= new JButton[9];
cartepos.setLayout( new GridLayout(3,3,0,0));
for (i=0;i<9;i++)
{
tab[i]= new JButton();
cartepos.add(tab[i]);
tab[i].addActionListener(this);
tab[i].addMouseListener(ec);

}

JPanel cartefinal = new JPanel();
b=new JButton();
b.setText(nbf+"");
b.setPreferredSize(new Dimension(130,90));
b.setFont( new Font("SansSerif",Font.TRUETYPE_FONT,18));
cartefinal.add(b,"final");
b.addActionListener(this);


cartes.setLayout(pile);

jp.add(cartepos,"carted");
jp.add(cartefinal,"cartef");




}

public int [] GetTab ()
{
return this.tabcase;
}

public int getfinal ()
{
return this.nbf;
}

public void SetFinal( int nb )
{
this.nbf=nb;
}

public void Settab( int nb)
{
tabcase[nb-1]=nb;
}

public static void setVales(int nb)
{
vales = nb;
}

public void actionPerformed ( ActionEvent ev )
{

for (i=0;i<9;i++)
{
if (ev.getSource()==tab[i])
{

System.out.println(vales+"");

if (vales==1 & test==0)
{
System.out.println("test vales");
pile.next(jp);
b.setText(PanelBouton.nb+"");
test=1;

}
if ((vales ==1)& test==1)
{
pile.previous(jp);
test=0;
}
if (vales ==2)
{
tab[i].setText(PanelBouton.nb+"");
}
}
}


}

}

classe EcouteSouris :
package vue_gui;
import java.awt.event.*;

public class EcouteSouris extends MouseAdapter
{
public void mouseClicked ( MouseEvent me)
{
if (Detail(me)==1)Case.setVales(1);

if (Detail(me)==2)Case.setVales(2);
System.out.println(Detail(me));
}
public static int Detail( MouseEvent me)
{
// System.out.println(me.getModifiers()+" "+InputEvent.BUTTON1_DOWN_MASK+" " );//
//System.out.println(me.getModifiers()+" "+InputEvent.BUTTON3_DOWN_MASK);

if ( me.getModifiers()!=0 & InputEvent.BUTTON1_DOWN_MASK != 0 )
{

// Case.setVales(1);

return 1;
// System.out.println(Case.vales+"");
}

else if (( me.getModifiers() & InputEvent.BUTTON3_DOWN_MASK )!=0 )
{
//Case.setVales(2);
return 2;
// System.out.println("test3");
}
else return 0;

// tab[i].setText(PanelBouton.nb+"");
}
}
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
Salut,



dans ton listener de souri tu fais

switch(e.getButton()){

case MouseEvent.BUTTON1:

System.out.println("bouton gauche");

break;

case MouseEvent.BUTTON2:

System.out.println("bouton millieu");

break;

case MouseEvent.BUTTON3:

System.out.println("bouton droit");

break;

}

}

WORA
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

voilà j'ai testé ce que tu m'as donné mais j'ai toujours deux problèmes :
pour le clic gauche je suis oblig de clquer 2 fois
pour le clic droit il ne fait rien il détecte mon clic pourtant(affichage consol en test ) mais rien sur mon bouton il ne bouge meme pas quand je clique dessus

Marc
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
Salut,



Pour le jbutton utilise le doClick si tu veux voir l'effet appartir d'un mouseClicked

WORA
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

j' ai trouvé mon problème un grand merci je laisse cette section ouverte j'aurai surement d'autre question par la suite

Encore Merci pour tout surtout a toi Wora tu m'as bien aidé
Marc
Messages postés
61
Date d'inscription
dimanche 30 octobre 2005
Statut
Membre
Dernière intervention
2 juillet 2009

bonjour me revoilà,

lorsque sauve mon modèle pas de problème mais quand je le recharge il dir java.io.eofrexception

une idée

merci d'avance
Marc