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 :

Problème affichage code


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Problème affichage code
    Bonjours à tous ,

    J'ai rencontré un problème avec ce code,

    Le menubar s'affiche deux fois, et les lignes dessinées ne s'affichent que sur le quart de la page.

    Nom : prob.JPG
Affichages : 213
Taille : 29,1 Ko


    Voici le code :

    La classe Panel :
    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
     
    import java.awt.BorderLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
     
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
     
    import java.awt.Graphics;
     
    import javax.swing.JPanel;
     
    import java.awt.Color;
     
    public class Panel extends JPanel {
     
    	private String colorName = "Tout";
    	private Color color = Color.RED;
    	private String forme = "Cercle";
    	private int taille = 30;
    	private int x = 0, y = 0;
    	private boolean allow = false;
    	private boolean listen = false;
     
    	@Override
    	public void paintComponent(Graphics g) {
    		// TODO Auto-generated method stub
    		super.paintComponents(g);
     
    		if (allow == true) {
    			if (colorName == "Rouge")
    				g.setColor(Color.RED);
    			else if (colorName == "Bleu")
    				g.setColor(Color.BLUE);
    			else if (colorName == "Tout") {
    				int r = (int) ((Math.random()) * 256);
    				int v = (int) ((Math.random()) * 256);
    				int b = (int) ((Math.random()) * 256);
     
    				color = new Color(r, v, b);
    				g.setColor(color);
    			}
    			if (forme == "Cercle")
    				g.fillOval(x, y, taille, taille);
    			if (forme == "Carre")
    				g.fillRect(x, y, taille, taille);
     
    		}
    		if (listen == true) {
    			g.setColor(Color.WHITE);
    			g.fillRect(0, 0, this.getWidth(), this.getHeight());
    			if (colorName == "Rouge")
    				g.setColor(Color.RED);
    			else if (colorName == "Bleu")
    				g.setColor(Color.BLUE);
    			else if (colorName == "Tout") {
    				int r = (int) ((Math.random()) * 256);
    				int v = (int) ((Math.random()) * 256);
    				int b = (int) (Math.random() * 256);
     
    				color = new Color(r, v, b);
    				g.setColor(color);
    				if (forme == "Rond")
    					g.drawOval(x, y, taille, taille);
    				if (forme == "Carre")
    					g.drawRect(x, y, taille, taille);
    			}
    		}
    		repaint();
    	}
     
    	public String getColorName() {
    		return colorName;
    	}
     
    	public void setColorName(String colorName) {
    		this.colorName = colorName;
     
    	}
     
    	public boolean isAllow() {
    		return allow;
    	}
     
    	public void setAllow(boolean allow) {
    		this.allow = allow;
    	}
     
    	public String getForme() {
    		return forme;
    	}
     
    	public void setForme(String forme) {
    		this.forme = forme;
     
    	}
     
    	public int getTaille() {
    		return taille;
    	}
     
    	public void setTaille(int taille) {
    		this.taille = taille;
    	}
     
    	public int getX() {
    		return x;
    	}
     
    	public void setX(int x) {
    		this.x = x;
    	}
     
    	public int getY() {
    		return y;
    	}
     
    	public void setY(int y) {
    		this.y = y;
    	}
     
    	public boolean isListen() {
    		return listen;
    	}
     
    	public void setListen(boolean listen) {
    		this.listen = listen;
    	}
     
    }
    La classe Frame :
    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
     
    public class Frame extends JFrame{
        JMenuBar mb = new JMenuBar();
        JMenu fichier = new JMenu("Fichier");
        JMenu edition = new JMenu("Edition");
     
    	Panel p = new Panel();
    	public Frame() {
     
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setLocationRelativeTo(null);
    		this.setSize(400,400);
    		this.setTitle("Test");
    		this.addMouseListener(new MouseAdapter(){
     
     
     
     
    			@Override
    			public void mousePressed(MouseEvent e) {
    				int a = e.getX() - (p.getTaille()/2);
    				int b = e.getY() - (p.getTaille());
     
    				p.setX(a);
    				p.setY(b);
    				p.setAllow(true);
    				p.setListen(false);
     
    			}
     
     
     
    		});
    		this.addMouseMotionListener(new MouseMotionListener() {
     
    			@Override
    			public void mouseMoved(MouseEvent e) {
     
    			}
     
    			@Override
    			public void mouseDragged(MouseEvent e) {
     
    				int a = e.getX() - (p.getTaille()/2);
    				int b = e.getY() - (p.getTaille());
     
    				p.setX(a);
    				p.setY(b);
    				p.setAllow(true);
    				p.setListen(false);
    			}
    		});
    		mb.add(fichier);
    		mb.add(edition);
    		this.setJMenuBar(mb);
    	    this.setLayout(new BorderLayout());
    		this.add(p, BorderLayout.CENTER);		
     
     
    		this.setVisible(true);
    	}
    	public static void main(String[] args) {
    		new Frame();
    	}
    }
    Pouvez-vous m'aider svp?

    Un grand merci d'avance !

  2. #2
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut Ma version du serpent multicolore
    Bonjour à vous, je me suis amusé cet aprèm à tenter de résoudre votre problème...

    Je ne sais pas traiter un jpanel comme un composant qu'on peut déplacer.

    J'ai donc changé pour un "Jcomponent.
    Cependant attention, les coordonées x et y de ce composant, ne sont pas accessibles directement dans l'affectation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.fillOval(0, 0, taille, taille);
    de votre code. Les coordonnées x et y en 0 , 0 ici, représente la position du rond, dans la zone de dessin du composant. Le rond occupe toute la zone de dessin et donc sur cette zone ces coordonnnées sont ( 0 , 0 , getWidth() , getHeight).
    Par contre, pour connaitre les coordonnées d'affichage, il faut passer par "setLocation" qui est la position de la zone contenant le dessin, ( donc la position du dessin du composant). Désolé si c'est mal expliqué....

    De même, il est préférable de ne pas traiter directement dans la JFrame principale, mais de définir des Jpanels, dans lesquels on travaille. La barre de menu notamment s'affiche correctement ainsi.

    Attention également au Layout : Le JPanel P1 est en position "Center", mais lui, possède un Layout "null". Ainsi, le serpent peut suivre les position du curseur sur tout le panel.
    Attention au "Layout null", car un composant n'apparait que si il est d'une taille non nulle et sur des coordonnées visibles dans ce panel.

    Je vous laisse regarder le code, que j'ai fragementé, pour les listenners notamment, car je comprends mieux ainsi...

    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
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionListener;
     
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JPanel;
     
     
     
     
     
     
    	public class Frame extends JFrame {
     
     
    	    /**
                     * 
                     */
    		private static final long serialVersionUID = 1L;
    		JMenuBar mb = new JMenuBar();
    	    JMenu fichier = new JMenu("Fichier");
    	    JMenu edition = new JMenu("Edition");
    	   static JPanel p1 = new JPanel();
    	   Ecouteur ecouteur = new Ecouteur();
     
    		public Frame() {
    			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    			this.setLocationRelativeTo(null);
    			this.setSize(400,400);
    			this.setTitle("Test");
    			 this.setLayout(new BorderLayout());
    			 this.add(p1, BorderLayout.CENTER);
    			 p1.setBackground(Color.gray);
    			 p1.setLayout(null);
    			 p1.addMouseListener(ecouteur);
    			 p1.addMouseMotionListener(ecouteur);
    			 this.setVisible(true);
     
     
     
    			mb.add(fichier);
    			mb.add(edition);
    			this.setJMenuBar(mb);
     
     
     
    		}
     
     
     
    		public static void main(String[] args) {
    			Frame f = new Frame();
     
     
     
    		}
     
    }


    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
     
    	import java.awt.Color;
    import java.awt.Graphics;
     
    import javax.swing.JComponent;
    import javax.swing.JPanel;
     
    	public class Composant extends JComponent {
     
    		/**
                     * 
                     */
    		private static final long serialVersionUID = 1L;
    		private String colorName = "Tout";
    		private Color color = Color.RED;
    		private String forme = "Cercle";
    		private int taille = 30;
    		private int x = 100, y = 100;
    		private boolean allow = true;
    		private boolean listen = false;
     
     
    		public Composant() {
    			this.setSize(taille, taille);
    			this.setLocation(x, y);
    			System.out.println("on construit le composant");
    		}
     
    		@Override
    		public void paintComponent(Graphics g) {
     
    			super.paintComponents(g);
     
    			this.setLocation(x, y);
     
    			if (allow == true) {
    				if (colorName == "Rouge")
    					g.setColor(Color.RED);
    				else if (colorName == "Bleu")
    					g.setColor(Color.BLUE);
    				else if (colorName == "Tout") {
    					int r = (int) ((Math.random()) * 256);
    					int v = (int) ((Math.random()) * 256);
    					int b = (int) ((Math.random()) * 256);
     
    					color = new Color(r, v, b);
    					g.setColor(color);
    				}
     
    				if (forme == "Cercle") {
    					g.fillOval(0, 0, taille, taille);
    				System.out.println("x= " + x + " et y = " + y);
    				System.out.println(g.getColor());
    				}
     
    //				if (forme == "Carre")
    //					g.fillRect(x, y, taille, taille);
    			}
    		}
     
     
     
     
     
    //			if (listen == true) {
    //				g.setColor(Color.WHITE);
    //				g.fillRect(0, 0, this.getWidth(), this.getHeight());
    //				if (colorName == "Rouge")
    //					g.setColor(Color.RED);
    //				else if (colorName == "Bleu")
    //					g.setColor(Color.BLUE);
    //				else if (colorName == "Tout") {
    //					int r = (int) ((Math.random()) * 256);
    //					int v = (int) ((Math.random()) * 256);
    //					int b = (int) (Math.random() * 256);
    //	 
    	//				color = new Color(r, v, b);
    		//			g.setColor(color);
    //					if (forme == "Cercle")
    //						g.drawOval(x, y, taille, taille);
    ////					if (forme == "Carre")
    //						g.drawRect(x, y, taille, taille);
    //				}
     
     
     
    		public String getColorName() {
    			return colorName;
    		}
     
    		public void setColorName(String colorName) {
    			this.colorName = colorName;
     
    		}
     
    		public boolean isAllow() {
    			return allow;
    		}
     
    		public void setAllow(boolean allow) {
    			this.allow = allow;
    		}
     
    		public String getForme() {
    			return forme;
    		}
     
    		public void setForme(String forme) {
    			this.forme = forme;
     
    		}
     
    		public int getTaille() {
    			return taille;
    		}
     
    		public void setTaille(int taille) {
    			this.taille = taille;
    		}
     
    		public int getX() {
    			return x;
    		}
     
    		public void setX(int x) {
    			this.x = x;
    		}
     
    		public int getY() {
    			return y;
    		}
     
    		public  void setY(int y) {
    			this.y = y;
    		}
     
    		public boolean isListen() {
    			return listen;
    		}
     
    		public  void setListen(boolean listen) {
    			this.listen = listen;
    		}
     
    }




    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
     
    	import java.awt.event.MouseEvent;
    	import java.awt.event.MouseListener;
    	import java.awt.event.MouseMotionListener;
     
    	public class Ecouteur implements MouseListener, MouseMotionListener{
     
     
    		int dx0, dy0 = 0;
    		int a,b ;
    		Composant c1;
     
    		@Override
    		// On clique sur p1
    		public void mousePressed(MouseEvent e) {	
    			a =  e.getX();
    			b = e.getY();
    			}
     
     
    		@Override
    		public void mouseDragged(MouseEvent e) {
     
    			c1 = new Composant();
    			c1.setX(a);
    			c1.setY(b);
    			Frame.p1.add(c1);
    			c1.repaint();
     
    			a =  e.getX();
    			b = e.getY();
     
    			c1.setListen(false);
     
    			}
     
     
     
     
     
    		@Override
    		public void mouseMoved(MouseEvent e) {							
    		}
    			@Override
    		public void mouseClicked(MouseEvent e) {			
     
    						}
    		public void mouseReleased(MouseEvent e) {		
    		}
    		public void mouseEntered(MouseEvent e) {
     
    		}
    		@Override
    		public void mouseExited(MouseEvent e) {					
    		}
     
    }


    voila une capture d'écran obtenue :
    Nom : serpent coloré.png
Affichages : 163
Taille : 67,1 Ko


    J'espère que j'ai pu vous aider.

    N'hésitez pas à me mettre un petit mot si vous êtes satisfait ou si vous voulez une précision...

    Bon courage.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup ! SVP Je voudrais en savoir plus sur serialVersionUID.

  4. #4
    Membre habitué

    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2020
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2020
    Messages : 167
    Points : 162
    Points
    162
    Par défaut sérial version uid
    Bonjour,

    n'étant pas un pro de l'informatique, je ne maitrise pas trop le sujet demandé.

    Cela dit, je comprends la chose ainsi, merci aux connaisseurs d'intervenir si nécessaire....

    Pour un programme tournant tout seul, sur une machine, ce numéro ne sert à rien..

    Cela dit, dans l'idée d'un fonctionnement en réseau et d'échange entre machines, des flux de données transitent, et notamment, des données représentant des objets.
    Normalement les deux machines connaissent les classes des objets échangés et donc les informations qui circulent ne sont pas les objets en tant que "définition de classe + valeurs des attributs", mais simplement des octets représentant que leurs attributs.
    A la réception de ces données, la machine réceptrice doit "reconstruire" la structure de l'objet (grâce à sa définition de classe qu'elle connait aussi", et aussi ses attributs avec les infos contenues dans le flux échangé.
    Évidemment, cela ne peut fonctionner que si les deux machines ont la même vision de la "structure de l'objet, et donc la même définition de sa classe.

    C'est là qu'intervient ce sérialNumber qui permet aux machines de savoir si elles peuvent interpréter les échanges de manière compatibles, vis-à-vis des de la "déconstruction" des objets pour la transmission et la "reconstruction" à la réception.


    En tout cas, c'est la vision que j'en ai, mais est-ce bien la bonne, mystère...

    J'espère que cela t'aura un peu aidé quand même....

    Bon travail...

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est bien cela oui. Ça permet de savoir si les deux côtés connaissent la même version de la classe, et de déclencher une erreur en ce sens si ce n'est pas le cas, plutôt que de risquer un comportement inattendu si cette vérification n'est pas faite.

    Bien sûr, cela nécessite de changer le serial à chaque fois qu'on change quoi que ce soit aux attributs...

    Mais tout cela intervient quand on utilise le mécanisme de sérialisation de Java, pour communiquer entre machines (ou sauvegarder dans un fichier et relire plus tard, ce qui peut être fait sur la même machine, mais avec un programme différent ou une version différente du programme).

    Or, c'est à éviter du fait des nombreux problèmes que cela pose. De nos jours on préférera des échanges en JSON ou en XML, qui font que le problème se pose moins, et qu'un changement de format d'une version à l'autre peut se gérer au lieu d'être unilatéralement rejetée.

    Du coup le serial, dans ces circonstances où l'on utilise pas la sérialisation Java, devient inutile.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    D'accord j'ai compris, je vous remercie énormément !

Discussions similaires

  1. [XL-2016] Problème affichage code-barres 128 dans TextBox
    Par MacroTD dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 04/07/2018, 11h04
  2. Problème affichage code html dans textEdit
    Par mercure07 dans le forum Qt
    Réponses: 5
    Dernier message: 10/09/2009, 10h59
  3. Problème affichage code automatique
    Par franck1001 dans le forum VBA Access
    Réponses: 1
    Dernier message: 14/12/2007, 23h56
  4. Réponses: 4
    Dernier message: 16/07/2007, 10h16
  5. Xsl problème d'affichage (code) [débutant]
    Par redsaint dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 01/06/2005, 17h02

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