Sudoku gui

marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009 - 12 mars 2006 à 00:21
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009 - 6 avril 2006 à 16:44
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

32 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 mars 2006 à 01:36
Salut,





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

WORA
0
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
12 mars 2006 à 13:57
j' ai testé avec de JButton mais je n arrive pas a affiche en gridlayout les possibilité dedans si quelqu' un sait comment faire
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 mars 2006 à 15:12
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
12 mars 2006 à 15:13
ou mouse clicked

WORA
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
14 mars 2006 à 14:15
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)
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 mars 2006 à 14:54
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
0
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
14 mars 2006 à 14:59
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 mars 2006 à 18:06
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
0
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
14 mars 2006 à 18:21
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 ... .
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 mars 2006 à 19:38
reste avec des panels dans ce cas tu te prendra moins le choux

WORA
0
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
14 mars 2006 à 20:44
dans ce cas comment je peux faire pour écrire dans le panel alors
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
14 mars 2006 à 21:30
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
0
cs_cas74 Messages postés 7 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 8 octobre 2006
16 mars 2006 à 20:59
Salut,
si ca peut t aider, j'ai posté une source sudoku,
essaye de voir si tu y trouves quelquechose
d interessant.
0
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
18 mars 2006 à 18:44
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
0
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
18 mars 2006 à 19:36
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+"");
}
}
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
18 mars 2006 à 20:20
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
0
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
19 mars 2006 à 15:50
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
19 mars 2006 à 17:15
Salut,



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

WORA
0
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
19 mars 2006 à 21:10
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
0
marc_dd Messages postés 61 Date d'inscription dimanche 30 octobre 2005 Statut Membre Dernière intervention 2 juillet 2009
30 mars 2006 à 16:52
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
0
Rejoignez-nous