IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Faire une grille dans une jPanel


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 39
    Par défaut Faire une grille dans une jPanel
    Bonjour,

    Je voudrais faire une grille de 30x30 dans une jPanel...
    J'ai fait quelques recherches, mais il y a pas mal de choses que je ne comprend pas...

    J'ai fait pour tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import java.awt.Graphics;
    import java.awt.Graphics2D;
     
    public class Dessin extends MaClasse {
     
    	Graphics g = jPanelCarte.getGraphics( );  
    	public void paintComponent(Graphics g){
    		super.paintComponents(g);
    	    Graphics2D g2 = (Graphics2D)g;   
    	   g2.drawLine(5,6,7,8);
    Mais cela ne dessine aucune ligne sur la fenêtre que j'ai fait dans MaClasse...

    Est-ce que je fais de la bonne façon ?

  2. #2
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    Salut,

    Ca devrait marcher normalement, Je viens d'essayer avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	public void paintComponent(Graphics g){
    	    Graphics2D g2d = (Graphics2D)g;
    	    g2d.drawLine(0,0, this.getWidth(), this.getHeight()-1);
    	    g2d.drawLine(0, this.getHeight()-1, this.getWidth(), 0);
    	}
    Ca marche sans soucis.

    Essaie de prendre un exemple plus significatif, dans ton exemple tu ne dessines qu'un pixel. Tu ne vas donc pas voir grand chose.

    PS:

    J'ai pas compris pourquoi tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Graphics g = jPanelCarte.getGraphics( );

    EDIT: J'avais pas fait attention mais ta classe MaClasse hérite bien d'un JPanel ?

  3. #3
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    Bonjour,

    ni meme pourquoi caster le Graphics en Graphics2D

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    J'avoue que je ne sais pas non plus pourquoi je fais ca moi aussi, dans tous les tutos que j'ai lus, Graphics était caster en Graphics2D...

  5. #5
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 39
    Par défaut
    EDIT: J'avais pas fait attention mais ta classe MaClasse hérite bien d'un JPanel ?
    Disons que MaClasse est une classe graphique, dans lequel j'ai mis tous les jPanel, les boutons, etc...
    En fait je ne comprend pas trop ta question, que cela signifie d'avoir une classe qui hérite d'un jPanel ?



    J'ai pas compris pourquoi tu fais :
    Code :
    Graphics g = jPanelCarte.getGraphics( );

    En fait je veux que la grille que je veux faire aille dans un jPanel...
    En fait c'est une carte, mon jPanel est un fond vert, je veux y mettre une grille, et après je devrais mettre des pions dans chaque case...




    Dans tous les cas j'ai testé ce que tu m'as donné, et ça n'affiche rien de plus sur mon interface...

  6. #6
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    C'est normal que cela ne fasse rien, ta méthode paintComponent ne marche que si l'objet supporte cette méthode. En gros si ta classe hérite d'un JComponent, alors tu peux aplliquer la méthode paintComponent, sinon ca ne fait rien.

    Perso, je créé une classe MonPanel qui hérite de JPanel et j'écris dans cette classe la méthode paintComponent .

  7. #7
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 39
    Par défaut
    Dans la classe MaClasse (où j'ai tous les jPanel, les boutons...)
    j'ai à un endroit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private JPanel getJPanelCarte() {
    		if (jPanelCarte == null) {
    			jPanelCarte = new JPanel();
    			jPanelCarte.setLayout(new GridBagLayout());
    			jPanelCarte.setBounds(new Rectangle(384, 0, 600, 600));
    			jPanelCarte.setBackground(Color.green);
    	paintComponent(Graphics g){
    		    Graphics g2d = (Graphics)g;
    		    g2d.drawLine(20,0, this.getWidth(), this.getHeight()-100);
    		    g2d.drawLine(0, this.getHeight()-50, this.getWidth(), 50);		
     
    		}
    		return jPanelCarte;

    Bon dans cette exemple je ne fais pas une grille, juste 2 traits qui se croisent...
    Mais cela ne fonctionne toujours pas !

  8. #8
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    Dans ta classe MaClasse tu as une méthode "getJPanelCarte()" qui renvoi un JPanel.
    Dans cette méthode tu appels la méthode "paintComponent", elle va donc s'appliquer à un objet de classe "MaClasse". Ca ne va donc pas marcher...

    Je ne comprends pas pourquoi tu testes "jPanelCarte==null", ton jPanelCarte est un attribut ? Dans ce cas pourquoi avoir une fonction pour le récupérer ?

    Mon exemple complet:

    Ma classe Main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    import javax.swing.JFrame;
     
    @SuppressWarnings("serial")
    class Main extends JFrame{
     
    	public static void main(String[] args){
    		new Main();
    	}
     
    	public Main(){
     
    		MonPanel panel = new MonPanel();
     
    		//Ajout du panel
            add(panel);
     
     
            //Parametre de la frame
            setSize(600, 480);
            setTitle("Exemple");
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setVisible(true);
    	}
     
    }
    Ma classe MonPanel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import java.awt.Graphics;
     
    import javax.swing.JPanel;
     
    @SuppressWarnings("serial")
    public class MonPanel extends JPanel{
     
    	public void paintComponent(Graphics g){
    	    g.drawLine(0,0, this.getWidth(), this.getHeight()-1);
    	    g.drawLine(0, this.getHeight()-1, this.getWidth(), 0);
    	}
     
    }

  9. #9
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    (juste comme ca paintComponent est protected pas public)

    Sinon je suis tous a fait d'accord avec laurentze c'est comme ca qu'il faut faire si tu veux un panel qui se dessine lui meme

  10. #10
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 39
    Par défaut
    Je suis désolé mais je ne comprend pas...

    Je suis avec Eclipse...

    Quand j'exécute ma classe Main, il me montre ce que j'ai fait sur ma classe Main, avec des boutons, des panels, etc... et rien dans le panel dans lequel je veux mettre ma grille...

    Et quand j'exécute ma classe MonPanel, il me montre une fenêtre avec ma grille, mais aucune trace de ma jFrame avec mes boutons...

  11. #11
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    Montres ton code, la je peux rien te dire ?

  12. #12
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 39
    Par défaut
    Ma classe principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
     
    import javax.swing.SwingUtilities;
    import java.awt.BorderLayout;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import java.awt.GridBagLayout;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.Color;
    import java.awt.GridBagConstraints;
    import java.awt.FlowLayout;
    import java.awt.CardLayout;
    import java.awt.Insets;
    import java.awt.SystemColor;
    import javax.swing.JTabbedPane;
    import java.awt.ComponentOrientation;
    import javax.swing.JButton;
    import javax.swing.JTextArea;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyEvent;
    import javax.swing.SwingConstants;
    import java.awt.Button;
    import java.awt.Point;
    import java.awt.Graphics;
    import javax.swing.*;
     
     
     
    import java.awt.Graphics;
    import java.awt.Graphics2D;
     
     
    	public static void main(String[] args) {
    			SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				MaClasse thisClass = new MaClasse();
    				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				thisClass.setVisible(true);
    			}
    		});
    	}
     
    	public MaClasse() {
    		super();
    		initialize();
    		Dessin panel = new Dessin();
    		add(panel);
    	}
     
    	private void initialize() {
    		this.setSize(1000, 750);
    		this.setContentPane(getJContentPane());
    		this.setTitle("JFrame");
    	}
     
     
    	private JPanel getJContentPane() {
    		if (jContentPane == null) {
    			jContentPane = new JPanel();
    			jContentPane.setLayout(null);
    			jContentPane.setForeground(new Color(51, 102, 120));
    			jContentPane.add(getJPanelConfiguration(), null);
    			jContentPane.add(getJPanelCarte(), null);
    			jContentPane.add(getJPanelSimulation(), null);
     
    		}
    		return jContentPane;
     
     
    		}
     
     
    public class MaClasse extends JFrame {
     
    	private static final long serialVersionUID = 1L;
    	private JPanel jContentPane = null;
    	private JPanel jPanelSimulation = null;
    	private JPanel jPanelConfiguration = null;
    	private JPanel jPanelCarte = null;
    	private JButton jButtonRemiseAZero = null;
    	private JTextArea jTextAreaAB = null;
     
     
     
    	private JPanel getJPanelSimulation() {
    		if (jPanelSimulation == null) {
    			GridBagConstraints gridBagConstraints = new GridBagConstraints();
    			gridBagConstraints.fill = GridBagConstraints.VERTICAL;
    			gridBagConstraints.gridy = 1;
    			gridBagConstraints.weightx = 1.0;
    			gridBagConstraints.gridx = 0;
    			jPanelSimulation = new JPanel();
    			jPanelSimulation.setLayout(new GridBagLayout());
    			jPanelSimulation.setBackground(new Color(84, 57, 0));
    			jPanelSimulation.setBounds(new Rectangle(0, 600, 984, 115));
    			jPanelSimulation.add(getJComboBoxNbTour(), gridBagConstraints);
    		}
    		return jPanelSimulation;
    	}
     
     
    	private JPanel getJPanelConfiguration() {
    		if (jPanelConfiguration == null) {
    			jPanelConfiguration = new JPanel();
    			jPanelConfiguration.setBounds(new Rectangle(0, 0, 384, 600));
    			jPanelConfiguration.setLayout(null);
    			jPanelConfiguration.setBackground(SystemColor.activeCaption);
    			jPanelConfiguration.add(getJButtonRemiseAZero(), null);
    			jPanelConfiguration.add(getJTextAreaAB(), null);
     
     
     
    		}
    		return jPanelConfiguration;
    	}
     
     
    	private JPanel getJPanelCarte() {
    		if (jPanelCarte == null) {
    			jPanelCarte = new JPanel();
    			jPanelCarte.setLayout(new GridBagLayout());
    			jPanelCarte.setBounds(new Rectangle(384, 0, 600, 600));
    			jPanelCarte.setBackground(Color.green);
     
    		}
    		return jPanelCarte;
    	}
     
    	/**
             * This method initializes jButtonRemiseAZero   
             *      
             * @return javax.swing.JButton  
             */
    	private JButton getJButtonRemiseAZero() {
    		if (jButtonRemiseAZero == null) {
    			jButtonRemiseAZero = new JButton();
    			jButtonRemiseAZero.setText("Remise à Zéro");
    			jButtonRemiseAZero.setSize(new Dimension(150, 40));
    			jButtonRemiseAZero.setLocation(new Point(120, 24));
    			jButtonRemiseAZero.addActionListener(new java.awt.event.ActionListener() {
    				public void actionPerformed(java.awt.event.ActionEvent e) {
    					System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
    				}
    			});
    		}
    		return jButtonRemiseAZero;
    	}
     
    	private JTextArea getJTextAreaAB() {
    		if (jTextAreaAB == null) {
    			jTextAreaAB = new JTextArea();
    			jTextAreaAB.setBounds(new Rectangle(38, 355, 310, 22));
    			jTextAreaAB.setFont(new Font("Trebuchet MS", Font.BOLD, 18));
    			jTextAreaAB.setText("Armée bleue...............................");
    			jTextAreaAB.setEditable(false);
    			jTextAreaAB.setTabSize(8);
    			jTextAreaAB.setBackground(SystemColor.activeCaption);
    		}
    		return jTextAreaAB;
    	}
     
     
     
    }
    Ma classe Dessin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    package com.eclipse;
     
    import java.awt.Graphics;
    import javax.swing.JPanel;
     
     
    public class Dessin extends JPanel {
     
     
    		protected void paintComponent(Graphics g){
    		    g.drawLine(0,0, this.getWidth(), this.getHeight()-30);
    		    g.drawLine(0, this.getHeight()-50, this.getWidth(), 100);
    		}
     
    	}

    Et en fait je veux ma grille (j'ai fait ici juste 2 traits pour voir si ça marche) dans mon jPanelCarte...

  13. #13
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 39
    Par défaut
    Non c'est bon j'ai réglé mon problème...

    En tout cas merci bien laurentze...

Discussions similaires

  1. Réponses: 15
    Dernier message: 26/01/2015, 19h37
  2. Recuperer une valeur dans une grille sur une image
    Par gwal21 dans le forum Images
    Réponses: 3
    Dernier message: 26/02/2011, 23h41
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo