Mettre un texte sur un JButton

jerem189 -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

je voudrais créer un programme qui résout les sudoku afin de m'entrainer pour la programmation en java de mes études. mon idée était la suivante :
- faire un gridlayout 9*9
-insérer un Jbutton a chaque case du gridlayout
-associé un texte ( accessible et modifiable par des méthodes et constructeur hors classe) a un bouton.
-associé un listener a chaque bouton pour qu'a chaque click le programme ouvre la fenetre de commande afin que l'utilisateur puisse entré le chiffre si il est donné ou 0 si il n'est pas donné par le sudoku au préalable

mon soucis se situe au niveau du texte, quel est la solution pour mettre un texte dans un bouton qui peut etre accessible et modifiable en fct de ce que l'utilisateur insère dans la commande.

d'avance merci,

Michaux Jérémy

A voir également:

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Pourquoi utiliser des JButton pour un Sudoku, des JTextField serait plus adapté je pense, ça permettrait de directement modifier la grille, sans avoir à ouvrir une pop-up...
0
jerem189
 
bonjour,

tout d'abord, merci de votre réponse rapide.
ensuite, pour les JTextField, j'ai 2-3 questions. premièrement , peut-on insérer un JTextField dans un gridlayout a la manière d'un bouton ? deuxièmement , un JTextField peut-il être a l'écoute d'un click de souris ?
et enfin, j'avais déja regardé comment manipuler des JTextField, mais je n'avais pas trouvé la méthode qui permet de modifier le text contenu dans le 'field'.
d'avance merci
0
KX Messages postés 19031 Statut Modérateur 3 020
 
"peut-on insérer un JTextField dans un gridlayout a la manière d'un bouton ?"
Le GridLayout sert uniquement à décrire comment placer les éléments, il ne contient pas lui même les objets, ça c'est le travail des conteneurs (JFrame, JPanel, etc.), mais oui, on peut ajouter n'importe quoi, y compris d'autres conteneur possédant des GridLayout de manières à faire les grilles intérieures (3x3)

"un JTextField peut-il être a l'écoute d'un click de souris ?"
Oui, bien sûr, mais également au clavier (et c'est tout l'intérêt).

"la méthode qui permet de modifier le text contenu dans le 'field'"
C'est setText(String), mais elle est un peu cachée dans la documentation de JTextField, car elle est directement héritée de JTextComponent.

Voici, un "petit" exemple qui illustre tes questions et mes réponses ;-)

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Test
{
public static void main(String...args)
{
    final JFrame frame = new JFrame();
    frame.setSize(250,274);
    frame.setLayout(new GridLayout(3,3));
    
    final JPanel[][] pan_tab = new JPanel[3][3];
    for (int i=0; i<3; i++)
    for (int j=0; j<3; j++)
    {
        pan_tab[i][j] = new JPanel(new GridLayout(3,3));
        pan_tab[i][j].setBorder(BorderFactory.createLineBorder(Color.BLACK));
        frame.add(pan_tab[i][j]);
    }
    
    final JTextField[][] txt_tab = new JTextField[9][9];
    for (int i=0; i<9; i++)
    for (int j=0; j<9; j++)
    {
        final String initialText = i+","+j;
        
        final JTextField field = new JTextField(initialText);
        
        field.addKeyListener(new KeyListener()
        {
            @Override
            public void keyPressed(KeyEvent e) 
            {
                System.out.println(initialText+"\tkeyPressed");
            }

            @Override
            public void keyReleased(KeyEvent e)
            {
                System.out.println(initialText+"\tkeyReleased");
            }

            @Override
            public void keyTyped(KeyEvent e)
            {
                System.out.println(initialText+"\tkeyTyped");
            }
        });
        
        field.addMouseListener(new MouseListener()
        {
            @Override
            public void mouseClicked(MouseEvent e)
            {
                System.out.println(initialText+"\tmouseClicked");
            }

            @Override
            public void mouseEntered(MouseEvent e)
            {
                System.out.println(initialText+"\tmouseEntered");
            }

            @Override
            public void mouseExited(MouseEvent e)
            {
                System.out.println(initialText+"\tmouseExited");
            }

            @Override
            public void mousePressed(MouseEvent e)
            {
                System.out.println(initialText+"\tmousePressed");
            }

            @Override
            public void mouseReleased(MouseEvent e)
            {
                System.out.println(initialText+"\tmouseReleased");
            }
        });
        
        pan_tab[i/3][j/3].add(field);
        txt_tab[i][j] = field;
    }
    
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
0