SOS vos aides s'il vous plaît... :)

Fermé
@programmeur Messages postés 1 Date d'inscription mardi 12 avril 2016 Statut Membre Dernière intervention 12 avril 2016 - Modifié par @programmeur le 12/04/2016 à 06:38
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 12 avril 2016 à 23:18
Bonjour,
je suis débutante en java et voila mon code du jeu sudoku mais il y a un problème au niveau de la vérification du validité d'un nombre saisie (même si je saisie un nombre invalide il s'affiche toujours en bleu je ssais pas où se trouve le problème ) vos aides s'il vous plaît...


import java.awt.*; 
import javax.swing.*; 
import javax.swing.text.JTextComponent; 

import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.ActionEvent; 

public class Jeux extends JFrame implements MouseListener{ 
JTextField[][] c=new JTextField[9][9]; 
private JPanel contentPane; 

Object[][] puzzle ={{"5", "", "", "6", "", "8","", "", "2"}, 
{"", "7", "", "", "9", "", "", "4", "8"}, 
{"1", "","", "3", "", "2", "5", "",""}, 
{"8", "", "9","", "6", "", "", "", "3"}, 
{"", "2","", "", "5","", "7", "","", ""}, 
{"7", "", "3", "","", "", "", "", ""}, 
{"","", "1", "", "", "7", "2", "","4"}, 
{"2", "", "7", "4", "", "9", "6", "", ""}, 
{"", "", "5","", "", "6", "1", "", "9"}}; 

//Launch the application.

public static void main(String[] args) { 
EventQueue.invokeLater(new Runnable() { 
public void run() { 
try { 
Jeux [/contents/494-frames-html frame] = new Jeux(); 
frame.setVisible(true); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
}); 
} 


//Create the frame.


public Jeux() { 
setFont(new Font("Dialog", Font.BOLD, 12)); 
setForeground(SystemColor.windowText); 
setBackground(SystemColor.activeCaption); 
setSize(new Dimension(594, 375)); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
setBounds(100, 100, 594, 430); 
setTitle("Sudoku"); 
JMenuBar menuBar = new JMenuBar(); 
setJMenuBar(menuBar); 

JMenu Option = new JMenu("Option "); 

Option.setFont(new Font("Segoe UI", Font.PLAIN, 15)); 
Option.setForeground(Color.BLACK); 
menuBar.add(Option); 

JMenuItem mntmNewMenuItem_1 = new JMenuItem("Nouvelle partie"); 
Option.add(mntmNewMenuItem_1); 

JMenuItem mntmNewMenuItem = new JMenuItem("Enregistrer"); 


Option.add(mntmNewMenuItem); 

JMenuItem mntmNewMenuItem_2 = new JMenuItem("Annuler"); 
Option.add(mntmNewMenuItem_2); 

JMenuItem mntmNewMenuItem_3 = new JMenuItem("Quitter"); 
Option.add(mntmNewMenuItem_3); 

JMenu Niveau = new JMenu("Niveau "); 
Niveau.setFont(new Font("Segoe UI", Font.PLAIN, 15)); 
Niveau.setForeground(Color.BLACK); 
menuBar.add(Niveau); 

JRadioButtonMenuItem rdbtnmntmNewRadioItem = new JRadioButtonMenuItem("Facile"); 
Niveau.add(rdbtnmntmNewRadioItem); 

JRadioButtonMenuItem rdbtnmntmNewRadioItem_1 = new JRadioButtonMenuItem("Moyenne"); 
Niveau.add(rdbtnmntmNewRadioItem_1); 

JRadioButtonMenuItem rdbtnmntmNewRadioItem_2 = new JRadioButtonMenuItem("Difficile"); 
Niveau.add(rdbtnmntmNewRadioItem_2); 

JMenu mnNewMenu_2 = new JMenu("Score"); 
mnNewMenu_2.setForeground(Color.BLACK); 
mnNewMenu_2.setFont(new Font("Segoe UI", Font.PLAIN, 15)); 
menuBar.add(mnNewMenu_2); 

JMenu mnNewMenu_4 = new JMenu("Dernier score"); 
mnNewMenu_2.add(mnNewMenu_4); 

JMenu mnNewMenu_5 = new JMenu("Meilleur score"); 
mnNewMenu_2.add(mnNewMenu_5); 

JMenu mnNewMenu_3 = new JMenu("Aide.."); 
mnNewMenu_3.setFont(new Font("Segoe UI", Font.PLAIN, 15)); 
mnNewMenu_3.setForeground(Color.BLACK); 
menuBar.add(mnNewMenu_3); 

JMenuItem mntmNewMenuItem_9 = new JMenuItem("Recommandation "); 
mnNewMenu_3.add(mntmNewMenuItem_9); 

JMenuItem mntmNewMenuItem_10 = new JMenuItem("R\u00E9gles"); 
mnNewMenu_3.add(mntmNewMenuItem_10); 
contentPane = new JPanel(); 

contentPane.setLayout(new BorderLayout(0, 0)); 
setContentPane(contentPane); 

JPanel panel = new JPanel(); 
contentPane.add(panel, BorderLayout.SOUTH); 
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); 

JButton btnNewButton_2 = new JButton("Exit"); 
btnNewButton_2.setFont(btnNewButton_2.getFont().deriveFont(btnNewButton_2.getFont().getSize() + 15f)); 
panel.add(btnNewButton_2); 

JButton Button_1 = new JButton("Start"); 

Button_1.setFont(Button_1.getFont().deriveFont(Button_1.getFont().getSize() + 15f)); 
panel.add(Button_1); 

JPanel panel_1 = new JPanel(); 
contentPane.add(panel_1, BorderLayout.WEST); 

JPanel panel_2 = new JPanel(); 
contentPane.add(panel_2, BorderLayout.EAST); 

JPanel panel_3 = new JPanel(); 
panel_3.setBackground(SystemColor.control); 
contentPane.add(panel_3, BorderLayout.NORTH); 
panel_3.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); 

JLabel lblNewLabel_1 = new JLabel("Essai : 3"); 
lblNewLabel_1.setForeground(Color.RED); 
lblNewLabel_1.setFont(new Font("Tahoma", Font.BOLD, 15)); 
panel_3.add(lblNewLabel_1); 
JPanel panel_5 = new JPanel(); 
panel_5.setForeground(Color.PINK); 
panel_5.setLayout(new GridLayout(9, 9)); 
panel_5.setBackground(Color.LIGHT_GRAY); 
panel_5.setSize(new Dimension(700, 7000)); 
contentPane.add(panel_5, BorderLayout.CENTER); 
panel_5.setLayout(new GridLayout(9, 9)); 




for (int row = 0; row < 9; row++) { 
for (int col = 0; col < 9; col++) { 
c[row][col] = new JTextField(); // Allocate element of array 
panel_5.add(c[row][col]); 
c[row][col].setText(puzzle[row][col]+""); 

c[row][col].setFont(new Font("Tahoma", Font.BOLD, 20)); 
c[row][col].setEditable(true); 
c[row][col].setBackground(Color.PINK); 
}} 

for (int row = 0; row < 9; row++) { 
for (int col = 0; col < 9; col++) { 

c[row][col].addKeyListener(new KeyListener(){ 



public void keyReleased(KeyEvent e) { 

JTextField source = (JTextField)e.getSource(); 

int rowSelected = 0; 
int colSelected = 0; 

for (int row = 0; row < 9 ; row++) { 
for (int col = 0; col < 9 ; col++) { 


if (c[row][col].getText() == source.getText()) { 
rowSelected = row; 
colSelected = col; 

}}} 
if( ligneValide(rowSelected,source,c ) && colonneValide( colSelected,source,c ) && caseValide(rowSelected, colSelected,c,source)) 

{ 
((JTextField)e.getSource()).setForeground(Color.BLUE); 

((JTextField)e.getSource()).setEditable(false); 
} 
else 
{ 

((JTextField)e.getSource()).setForeground(Color.RED); 

((JTextField)e.getSource()).setEditable(true); 
} 
} 

@Override 
public void keyPressed(KeyEvent arg0) { 
// TODO Auto-generated method stub 

} 


public void keyTyped(KeyEvent e) { 
char c=e.getKeyChar(); 
if(!(Character.isDigit(c)||(c==KeyEvent.VK_SPACE)||c==KeyEvent.VK_DELETE)){ 
getToolkit().beep(); 
e.consume();} 


} }); 


}} 
} 
public boolean ligneValide(int row, JTextField source, JTextField [][] c) 
{ boolean res=false; 
String ligne=""; 
for(int i=0;i<9 && res == false;i++){ 
ligne+= c[row][i].getText(); 

if (ligne!=source.getText()) 
{ res=true;} 
} 

return res; 



} 

public boolean colonneValide(int col, JTextField source, JTextField [][] c) 
{ boolean res=false; 
String colonne=""; 
for(int i=0;i<9 && res == false;i++){ 
colonne+= c[i][col].getText(); 

if (colonne!=source.getText()) 
{ res=true;} 
} 

return res; 



} 
public boolean caseValide(int row, int col, JTextField [][] c,JTextField source) 
{ boolean res=false; 
String cas=""; 
for(int i=0;i<9 && res == false;i++){ 
cas+= c[(row/3)*3+i/3][(col/3)*3+i%3].getText(); 

if (cas!=source.getText()) 
{ res=true;} 
} 

return res; 



} 
} 


1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
12 avril 2016 à 23:18
Bonjour,

Les conditions que tu mets dans le keyPressed tu devrais aussi les avoir dans le keyReleased parce que ces deux événements vont s'enchaîner et même si tu ne fais pas le keyPressed parce que le caractère n'est pas valide, ça n'empêchera pas le keyReleased de s'exécuter.

De manière générale tu as trop de code dans ton KeyListener, tu devrais juste t'en servir comme d'un point d'entrée pour lancer un SwingWorker qui fera tes actions (ou non).
0