Afficher une barre d'outils en java

Signaler
Messages postés
14
Date d'inscription
mercredi 11 août 2010
Statut
Membre
Dernière intervention
18 août 2010
-
Messages postés
16
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
31 août 2010
-
Bonjour,
Je suie entrain d'implémenter le jeu SUDOKU en java.
J'ai crée une barre de menu et j'aimerais créer une barre d'outils.
J'espère que vous m'aidiez.
MERCI D'AVANCE.

11 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
Salut,

Il te suffit d'utiliser le JToolBar.

Voir le tutoriel de sun.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
14
Date d'inscription
mercredi 11 août 2010
Statut
Membre
Dernière intervention
18 août 2010

Je vous remercie pour votre aide, mais j'obtiens à chaque fois une barre décalée. Est-ce-que je ne peux pas l'afficher dés le début dans la bonne position et changer les dimensions des bouttons?
J'ai essayé add(scrollPane, BorderLayout.CENTER);
mais ça n'a pas marché.
MERCI d'avance.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
Salut,

Si tu utilise un borderLayout, positionne-le plutôt au nord plutôt qu'au centre si tu ne veux pas le voir décaler.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
14
Date d'inscription
mercredi 11 août 2010
Statut
Membre
Dernière intervention
18 août 2010

Désolé pour le dérangement, mais rien ne change.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
Salut,

Qu'est-ce que tu veux dire par décallage ? Problème de position du toolbar ?

Montre nous ton code pour voir ce qui cloche.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
14
Date d'inscription
mercredi 11 août 2010
Statut
Membre
Dernière intervention
18 août 2010

Voici le code, je vous remercie énormément.
package game;

import java.awt.*;
import java.awt.event.*;

import javax.print.DocFlavor.URL;
import javax.swing.*;

import java.io.*;

import game.Sudoku;


import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Arrays;
import java.awt.event.ActionListener;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowListener;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;

import java.awt.*;
import java.awt.image.*;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;






public class Interface extends JFrame implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = -5167639514702229574L;
JTextField [] Entries;
Sudoku game;
private JMenuBar menuBar = new JMenuBar();

private JMenu test1 = new JMenu("Jeu");
private JMenu test1_2 = new JMenu("Difficulté");
private JMenu test2 = new JMenu("Options");
private JMenu test3 = new JMenu("?");

private JMenuItem item1 = new JMenuItem("Nouveau Jeu");

private JMenuItem item2 = new JMenuItem("Quitter");
private JMenuItem item3 = new JMenuItem("Enregistrer");
private JMenuItem item4 = new JMenuItem("Solution");
private JMenuItem item5 = new JMenuItem("Entrer une grille");
private JMenuItem item6 = new JMenuItem("Règles");
private JMenuItem item7 = new JMenuItem("A Propos");




private JCheckBoxMenuItem jcmi1 = new JCheckBoxMenuItem("Facile");
private JCheckBoxMenuItem jcmi2 = new JCheckBoxMenuItem("Moyen");
private JCheckBoxMenuItem jcmi3 = new JCheckBoxMenuItem("Difficile");
FileDialog fd = new FileDialog(this, "Save File", FileDialog.SAVE);
private JToolBar toolBar = new JToolBar();
private JButton Enregistrer = new JButton(new ImageIcon("Images/Enregistrer.jpg"));







public Interface ()
{ super();





Container c = getContentPane();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
c.setLayout(gbl);
setTitle(" MonSudoku *** ENSI");
setBounds(500, 150, 150, 50);
c.setBackground(new Color(255,255,255));




constraints.fill = GridBagConstraints.HORIZONTAL;
constraints.ipadx = 40;
constraints.ipady = 10;
constraints.gridheight=1;
constraints.weightx = 0;
constraints.weighty = 0;




Entries = new JTextField[81];
constraints.gridheight=1;
constraints.fill = GridBagConstraints.BOTH;
constraints.ipady = 30;
for(int i=0; i<9; i++)
{
for(int j=0; j<9; j++)
{
Entries[i*9+j] = new JTextField(3);
Entries[i*9+j].setFont( new Font("Algeria",Font.BOLD,13) );
Entries[i*9+j].addKeyListener( new EntryListener(i, j));
Entries[i*9+j].setHorizontalAlignment(JTextField.CENTER);
constraints.gridx = j+1;
constraints.gridy = i;
gbl.setConstraints(Entries[i*9+j], constraints);

if((i/3 + j/3)%2 == 0)
Entries[i*9+j].setBackground(new Color(69,202,180));
else
Entries[i*9+j].setBackground(new Color(149,236,221));

c.add(Entries[i*9+j]);
}
}

pack();
setVisible(true);
initialiser();
initBar();

}

public void initialiser(){


setBounds(500, 170, 420, 520);




//On ajoute les éléments dans notre sous-menu
this.test1.add(item1);
this.test1_2.add(jcmi1);
this.test1_2.addSeparator();
this.test1_2.addSeparator();
this.test1_2.add(jcmi2);
this.test1_2.addSeparator();
this.test1_2.addSeparator();

this.test1_2.add(jcmi3);

//Ajout du sous-menu dans notre menu
this.test1.add(this.test1_2);
//Ajout d'un séparateur
this.test1.addSeparator();

item2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});


this.test1.add(item2);

this.test2.add(item3);
this.test2.addSeparator();

this.test2.add(item4);
this.test2.addSeparator();
this.test2.add(item5);

this.test3.add(item6);
this.test3.addSeparator();

this.test3.add(item7);


item4.addActionListener(new Resoudre());

item3.addActionListener(new Enregistrer());
item5.addActionListener(new EffacerGrille());
item7.addActionListener( new APropos() );
item6.addActionListener( new Regles() );


this.menuBar.add(test1);
this.menuBar.add(test2);
this.menuBar.add(test3);


//-------------------------

this.setJMenuBar(menuBar);
menuBar.setBackground(new Color(255,255,255));
this.setVisible(true);









}
public void initBar(){

toolBar.add(Enregistrer);
setPreferredSize(new Dimension(600, 400));
add(toolBar, BorderLayout.PAGE_START);


}








public void displayGame()
{
for(int i=0; i<81; i++)
{
if(game.fixe[i])
{
Entries[i].setForeground(Color.white);
Entries[i].setText(Long.toString(game.solution[i]));
}
else
{
/* reset the fg color */
Entries[i].setForeground(Color.black);
Entries[i].setText("");
}
}
}





public int newGame()
{
do
game = new Sudoku(0);
while( ! game.backTrack());
displayGame();
return 1;
}



/* to implement the moves between cells */
private class EntryListener implements KeyListener
{

private int x;
private int y;
public EntryListener(int x, int y)
{
this.x = x;
this.y = y;
}

/* Handle the key pressed event from the text field. */
public void keyPressed(KeyEvent e)
{
int key = e.getKeyCode();
switch(key)
{
case KeyEvent.VK_DOWN:
{
if(x<9)
Entries[(x+1)*9+y].requestFocus();
break;
}
case KeyEvent.VK_UP:
{
if(x>0)
Entries[(x-1)*9+y].requestFocus();
break;
}
case KeyEvent.VK_LEFT:
{
if(y>0)
Entries[x*9+y-1].requestFocus();
break;
}
case KeyEvent.VK_RIGHT:
{
if(y<9)
Entries[x*9+y+1].requestFocus();
break;
}
}
}

/* Handle the key typed event from the text field. */
public void keyTyped(KeyEvent e)
{
int id = e.getID();
if (id == KeyEvent.KEY_TYPED)
{
char c = e.getKeyChar();
if( (int)c >= 49 && (int)c <= 57 )
if( game.noConflict(x*9+y, (int)c - 48 ))
Entries[x*9+y].setText(""+c);
String val_texte = Entries[x*9+y].getText();
float val = Float.parseFloat( val_texte );

if ((int)val != game.solution[x*9+y])
JOptionPane.showMessageDialog( null, "\n Tentative incorrecte \n Veuillez réessayer ", " Attention!",1);

}
/* to stop treating of the event */
e.consume();
}


/* Handle the key released event from the text field. */
public void keyReleased(KeyEvent e) {}


}






public class APropos implements ActionListener {

public void actionPerformed( ActionEvent e) {
Component c = (Component)e.getSource();

JOptionPane.showMessageDialog( null, "\n SUDOKU \n été 2010 \n Tous droits reservés \n Soumaya & Zeineb \n ", " A Propos de Sudoku",1);
}}




public class Enregistrer implements ActionListener {



public void actionPerformed( ActionEvent e) {


fd.setVisible(true);
String filename = fd.getFile();
try
{
PrintStream ps = new PrintStream(new FileOutputStream(filename));
for(int i=0; i<81; i++)
{
if( i%9 == 0)
ps.print("\n");
if(game.fixe[i])
ps.print("-" + game.values[i]);
else
ps.print(game.values[i]);
}
ps.close();
}
catch (Exception exp) { }
}
}


public class Regles implements ActionListener {

public void actionPerformed( ActionEvent e) {
JOptionPane.showMessageDialog( null," Le but est de remplir toutes les cases de la grille\n en n'utilisant que les chiffres de 1 à 9.\n Chaque mini-grille de 3*3 doit contenir 9 chiffres differents\n et il est interdit de placer deux fois le même chiffre\n sur la même ligne ou sur la même colonne...", " Règles",1);
}}
public class EffacerGrille implements ActionListener {

public void actionPerformed( ActionEvent e) {

{
for( int i=0; i<9; i++ )
{
for( int j=0; j<9; j++ )
{
Entries[9*i+j].setText(" ");
}
}
}
}
}

public class Resoudre implements ActionListener {
public void actionPerformed( ActionEvent e) {


for(int i=0; i<81; i++)
{
if( ! game.fixe[i])
Entries[i].setText(Long.toString(game.solution[i]));
}
}

}





public static void main( String args[] )
{
Interface f = new Interface();
f.newGame();

}




}


et voici l'autre classe dans un deuxième fichier

package game;

import java.lang.Object;
import java.lang.Integer;
import java.lang.String;
import java.util.Random;



public class Sudoku
{
public boolean[] fixe;
public int[] values;
public int[] solution;
private static Random rand = new Random();

public Sudoku()
{
this.fixe = new boolean[81];
this.values = new int[81];
this.solution = new int[81];
}

public Sudoku( String s)
{
this.fixe = new boolean[81];
this.values = new int[81];
this.solution = new int[81];

for( int i=0; i<81; i++)
{
if( s.charAt(i) == '-' )
{
this.values[i] = 0;
this.fixe[i] = false;
}
else
{
this.values[i] = (int) s.charAt(i) - 48;
this.fixe[i] = true;
}
}
}

public Sudoku(int n)
{
this.fixe = new boolean[81];
this.values = new int[81];
this.solution = new int[81];

for(int i=0; i<81; i++)
{
this.values[i] = 0;
}

int cases_fixes = 0;
int index;
int value;

/* choose the number of boxes to fill */
if(n==0)
n = 15+ rand.nextInt(16);
while(cases_fixes < n)
{
index = rand.nextInt(81);
if( values[index] == 0)
{
value = 1+ rand.nextInt(9);
if( ! noConflict( index, value ) )
{
value = 1 + rand.nextInt(9);
if( noConflict( index, value ) )
{
fixe[index] = true;
values[index] = value;
cases_fixes++;
}
}
else
{
fixe[index] = true;
values[index] = value;
cases_fixes++;
}

}
}
}


public void print()
{
for(int i=0; i<9; i++)
{
if( i % 3 == 0)
System.out.println("+-----------+");

for(int j=0; j<9; j++)
{
if(j % 3 == 0)
System.out.print("|");
System.out.print(this.values[i*9+j]);
}
System.out.println("|");
}
System.out.println("+-----------+");
}

public void printSolution()
{
for(int i=0; i<9; i++)
{
if( i % 3 == 0)
System.out.println("+-----------+");

for(int j=0; j<9; j++)
{
if(j % 3 == 0)
System.out.print("|");
System.out.print(this.solution[i*9+j]);
}
System.out.println("|");
}
System.out.println("+-----------+");
}


public boolean noConflict( int n, int value)
{
int i = n / 9;
int j = n % 9;
for(int k=0; k<9; k++)
{
/* teste la ligne (on itere sur les colonnes) */
if (k !j && this.values[i*9+k] value)
return false;

/* teste la colonne (on itere sur les lignes) */
if (k !i && values[k*9+j] value)
return false;
}
for( int l = i/3*3; l < i/3*3+3; l++)
for(int m = j/3*3; m < j/3*3+3; m++)
if (l!=i && m!=j && this.values[l*9+m] == value)
return false;
return true;
}

public boolean noConflictSol( int n, int value)
{
int i = n / 9;
int j = n % 9;
for(int k=0; k<9; k++)
{
/* teste la ligne (on itere sur les colonnes) */
if (k !j && solution[i*9+k] value)
return false;

/* teste la colonne (on itere sur les lignes) */
if (k !i && solution[k*9+j] value)
return false;
}
for( int l = i/3*3; l < i/3*3+3; l++)
for(int m = j/3*3; m < j/3*3+3; m++)
if (l!=i && m!=j && solution[l*9+m] == value)
return false;
return true;
}


/* returns false if no solution has been found
* returns true if a solution has been found
*/
public boolean backTrack()
{
int i;
for( i=0; i<81; solution[i] = values[i++] );
i = 0;
while(i<=80)
{
if(fixe[i])
i++;
else
{
if(solution[i] == 0)
solution[i] = 1;
else
solution[i] = solution[i]+1;

while( (! noConflictSol(i, solution[i])) && solution[i] <= 9)
solution[i]++;

if (solution[i] == 10)
{
solution[i] = 0;
i--;
while ( i>0 && fixe[i] )
--i;

/* no solution for this grid */
if(i 0 && (solution[i] 9 || fixe[i]))
{
return(false);

}
}
else
i++;
}
}

/* if we arrive here, a solution has been found */
if (i==81)
return(true);

return(false);
}



public static void main( String[] args)
{
if(args.length != 1)
{
System.out.println("Usage: java Sudoku 'a string of 81 numbers'");
System.out.println("unknown numbers are replaced by '-'");
System.exit(0);
}

if(args[0].length() != 81)
{
System.out.println("wrong parameter");
System.exit(0);
}
else
{
Sudoku s = new Sudoku( args[0] );
s.print();
s.backTrack();
}
}


}
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
Salut,

Montre nous juste le bout de code où tu crée ton JToolBar, car là c'est un peu indigeste de devoir tout ton code juste pour trouver le petit bout de code.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
14
Date d'inscription
mercredi 11 août 2010
Statut
Membre
Dernière intervention
18 août 2010

D'accord, et je ne sais pas s'il y a une possibilité de vous envoyer un imprime écran pour voir le code compilé.
public void initBar(){
private JToolBar toolBar = new JToolBar();

toolBar.add(Enregistrer);
setPreferredSize(new Dimension(600, 400));
add(toolBar, BorderLayout.PAGE_START);


}
MERCI.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
128
Salut,

Je vois pas l'endroit dans ton code où tu définit un BorderLayout.

Je ne vois qu'un GridBagLayout.

Il faut que tu enlève les paddings pour la case contenant ton JToolBar pour enlever les espacements automatiques.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Messages postés
14
Date d'inscription
mercredi 11 août 2010
Statut
Membre
Dernière intervention
18 août 2010

Bonsoir,
Je vous remercie énormément.
J'ai ajouté setLayout(new BorderLayout());
et c bon.
MERCI BIEN!!
Messages postés
16
Date d'inscription
dimanche 6 juin 2010
Statut
Membre
Dernière intervention
31 août 2010

Salut, c'est vrai il faudrait remplacer

Container c = getContentPane();
GridBagLayout gbl = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
c.setLayout(gbl);

par,

Container container = getContentPane();
container.setLayout(newBorderLayout());
GridBagLayoutgbl = new GridBagLayout();
GridBagConstraints constraints = new GridBagConstraints();
JPanel c = new JPanel(gbl);
.
.
.
add(toolBar, BorderLayout.PAGE_START);
add(c, BorderLayout.PAGE_CENTER);

Voilà!

Je suis pas sur que la syntaxe soit parfaite
je n'ai pas tout en tête mais ça devrait aller!
Bonne chance!


Kidator.