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

AWT/Swing Java Discussion :

faire défiler un message dans un panel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 9
    Par défaut faire défiler un message dans un panel
    Bonjour à tous ,

    Dans un exercice de prog, il m'est demandé de créer une application qui fait défiler un message dans un panel (en utilisant un timer). Lorsque le message a totalement quitté l'écran, il faut le faire réaparaitre de l'autre coté.
    Comme il s'agit du chapitre sur les éléments graphiques, j'aimerai utiliser un JLabel contenant le texte. Malheureusement, une fois que j'ajoute ce composant dans le panel, je n'ai aucun moyen de (re)définir son emplacement si ce n'est qu'à gauche, au milieu ou à droite... la method .setLocation(int x, int y) de l'objet n'y change rien du tout.

    Est-ce que je fais fausse route en utilisant un JLabel ?

    Merci d'avance

  2. #2
    Membre éclairé

    Profil pro
    Coach Agile
    Inscrit en
    Décembre 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Décembre 2005
    Messages : 316
    Par défaut
    Ton chapitre aborde les éléments graphiques. Je ne trouve donc pas déraisonnable de repartir à leur source.
    Je pense donc plus sage de t’orienter vers l’utilisation de java.awt.Graphics2D, qui te permettra de dessiner les portions de texte que tu souhaites (via drawString( ) par exemple), où tu le souhaites.

    Chris.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 9
    Par défaut
    Merci Chris pour ta réponse, c'est effectivement avec drawString() que j'avais pensé commencer mais je voulais avoir votre avis concernant la version JLabel.

    Mon dernier souci, c'est que la donnée du problème me demande d'afficher le message dans un panel et que je n'y arrive pas. Dans une frame ca fonctionne, dans un panel que j'ajoute ensuite sur la frame, ca fonctionne pas...

    TextViewer.java
    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
     
    import java.awt.BorderLayout;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class TextViewer {
     
    	public static void main(String[] args) {
     
    		String text = "HELLO !";
    		int x = 0;
    		int y = 20;
     
    		JFrame frame = new JFrame();
     
    		/*
    		 * drawString dans la frame, ca fonctionne
    		frame.add(new DrawText(text, x, y));
    		*/
     
    		/*
    		 * drawString dans le panel, puis ajout du pannel dans la frame, ca fonctionne pas...
    		JPanel textPanel = new JPanel();
    		textPanel.add(new DrawText(text, x, y));
    		frame.add(textPanel, BorderLayout.NORTH);
    		*/
     
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setSize(300,400);
    		frame.setVisible(true);
     
    	}
    }
    DrawText.java
    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
    import java.awt.Graphics;
    import java.awt.Graphics2D;
     
    import javax.swing.JComponent;
     
    public class DrawText extends JComponent
    {
    	private String text;
    	private int x;
    	private int y;
     
    	public DrawText(String text, int x, int y)
    	{
    		this.text = text;
    		this.x = x;
    		this.y = y;
    	}
     
    	public void paintComponent(Graphics g)
    	{
    		Graphics2D g2 = (Graphics2D) g;
    		g2.drawString(text,x,y);
    	}
    }

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    La version avec un JLabel tu peux l'oublier, ce serait trop lourd de faire ça.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 43
    Par défaut
    ça n'a rien de lourd avec le JLabel, il suffit de mettre le layout du panel à null, là tu pourras déplacer ton texte avec label.setBounds.

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Sauf que le JLabel déclenche un cerntain nombres de méthodes, qu'il faut repeindre le composant, ses bordures, déclencher d'hypothétiques évènement à chaque redéplacement et ça c'est lourd comparé à un simple drawString sur des graphics

  7. #7
    Membre éclairé

    Profil pro
    Coach Agile
    Inscrit en
    Décembre 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Coach Agile

    Informations forums :
    Inscription : Décembre 2005
    Messages : 316
    Par défaut
    Je dois admettre que je suis bien incapable, dans l’immédiat, de te dire le pourquoi du comment ... Si quelqu’un le sait, cela m’intéresse.

    En revanche, pour faire simple. Si tu restes sur ton option de départ, et que tu hérites, non pas d’un JComponent, mais directement d’un JPanel ?
    Tu pourras ainsi gérer directement dans ton JPanel tous les effets visuels que tu souhaites, et en plus, le même code (ou presque) fonctionne très bien.

    DrawText.java :
    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
     
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import javax.swing.JPanel;
     
    public class DrawText extends JPanel
    {
     private String text;
     private int x;
     private int y;
     
     public DrawText(String text, int x, int y)
     {
      this.text = text;
      this.x = x;
      this.y = y;
     }
     
     public void paintComponent(Graphics g)
     {
                    super.paintComponent(g);
      Graphics2D g2 = (Graphics2D) g;
      g2.drawString(text,x,y);
     }
    }
    TextViewer.java :
    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
     
    import java.awt.BorderLayout;
    import javax.swing.JFrame;
     
    public class TextViewer {
     
     public static void main(String[] args) {
     
      String text = "HELLO !";
      int x = 0;
      int y = 20;
     
      JFrame frame = new JFrame();
     
      /*
       * drawString dans la frame, ca fonctionne
                     */
      frame.add(new DrawText(text, x, y));
     
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(300,400);
      frame.setVisible(true);
     
     }
    }
    Chris

Discussions similaires

  1. Faire défiler des photos dans un cadre
    Par philou029 dans le forum Langage
    Réponses: 2
    Dernier message: 04/06/2007, 14h19
  2. Probleme d'affichage de Message dans un Panel
    Par vorhax dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/04/2007, 21h13
  3. Faire défiler un texte dans un label
    Par FluidBlow dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/10/2006, 20h32
  4. Comment faire défiler une image dans un DBImage
    Par kolac dans le forum Bases de données
    Réponses: 1
    Dernier message: 08/04/2006, 13h45
  5. Faire défiler un texte dans une cellule de tableau
    Par Furius dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 01/12/2005, 17h06

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