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 :

Texte défilant de bas en haut mais qui sort du JPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut Texte défilant de bas en haut mais qui sort du JPanel
    Voici mon code pour obtenir un texte défilant, de bas en haut. Il marche nikel mais j'aimerais pouvoir afficher autant de texte que je souhaite sans qu'il sorte du JPanel, mais je n'y arrive pas. En clair, j'aimerais que le JLabel que je fais défiler revienne à la ligne si jamais il dépasse la taille du JPanel.
    J'ai essayé d'appeler plusieurs fois ma classe en changeant le 'String text' ou en remplaçant mon JPanel par un JTextArea pour utiliser la méthode setLineWrap(true); mais sans succès.

    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
     
    import java.awt.Dimension;
    import java.awt.FontMetrics;
    import java.awt.Graphics;
    import java.awt.Insets;
    import java.util.Timer;
    import java.util.TimerTask;
     
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class PanelTexteDéfilant extends JPanel
    {
    	public PanelTexteDéfilant()
    	{
    		final class JScrollingText extends JLabel 
    		{ 
    			private int speed;
    			private int period; 
    			private int y;
     
    			// Méthodes surchargées = 2 Constructeurs
    			public JScrollingText(String text,int speed) {this(text,speed,100);}
     
    			public JScrollingText(String text,int speed,int period) {this(text,speed,period,0);}
     
    			public void paintComponent(Graphics g) 
    			{
    			    if (isOpaque()) {
    			        g.setColor(getBackground());
    			        g.fillRect(0,0,getHeight(),getWidth());
    			    }
    			    g.setColor(getForeground());
     
    			    FontMetrics fm = g.getFontMetrics();
    			    Insets insets = getInsets();
     
    			    int width = getWidth() - (insets.top + insets.bottom);
    			    int height = getHeight() - (insets.left + insets.right);
     
    			    int textHeight = fm.getHeight(); 
    			    if (height < textHeight) {
    			        height = textHeight;
    			    }
    			    y %= height;
     
    			    int textX = insets.left + (width - fm.stringWidth(getText()))/2; // Centre le texte
    			    int textY = insets.top + y; 
     
    			    g.drawString(getText(),textX,textY);
    			    g.drawString(getText(),textX ,textY + (speed > 0 ? - height : height));
    			}
     
    			public void start() 
    			{
    			    Timer timer = new Timer();
    			    TimerTask task = new TimerTask() {
    			       public void run() {
    			            y = y + speed;
    			            repaint();
    			        }
    			    };
    			    timer.scheduleAtFixedRate(task,0,period);
    			}  
    		}
     
    		JScrollingText scrollingText1 = new JScrollingText("Coucou",-1);
    	    scrollingText1.start();
    	    setPreferredSize(new Dimension(200,330));
                     setLayout(new BorderLayout());
    	    add(scrollingText1);
    	}
    }
    J'espère que vous aurez des réponses à mon problème.
    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    En fait, j'aimerais mettre plusieurs lignes de texte et non une seule.
    Merci.

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Soit tu gères toi même tes lignes dans ton paint (je ne te le conseille pas) (mais ce serait un excellent exercice), soit tu utilises d'autres composants, comme le JTextPane ou le JLabel qui font ça tout seul, et tu gères la mécanique pour faire défiler non plus le texte, mais le composant.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    J'ai eu l'idée également de créer une image avec mon texte et de la faire défiler ainsi, ca pourrait marcher surement.
    Peux tu me donner des indications pour pouvoir faire défiler le composant.
    Merci.

  5. #5
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Pour l'idée de créer un texte-image, il existe la technique du Renderer. Vois à ce mot clef.

    Pour l'idée de faire défiler un composant-texte dans un autre composant, tu peux placer un layout à null dans cet autre composant, lui affecter une preferredSize - ou du moins quelque chose de compréhensible par le layout du conteneur de l'autre composant -, faire défiler ton composant-texte avec setLocation, puis, selon ce que l'Esprit Java voudra, faire et/ou repaint et/ou validate et/ou revalidate et/ou invalidate (problème jamais clair avec swing).

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Merci pour ton aide mais pour l'instant, je vais faire un standby sur ce texte qui défile, je suis débutant et pour moi ce n'est pas aussi clair que pour toi.
    Je m'y remettrai quand je serais plus efficace.
    Merci en tout cas, bye.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Formulaire: texte vertical de bas en haut
    Par Loudjé dans le forum IHM
    Réponses: 12
    Dernier message: 24/01/2012, 09h00
  2. [JTabbedPane] afficher texte étiquette bas en haut.
    Par spoutyoyo dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 07/07/2009, 17h46
  3. Mais qui donc travail sur l'ordinateur la bas
    Par borislotte dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/06/2007, 19h11
  4. [FLASH MX2004] Texte défilant de bas en haut sous un masque !
    Par °°° Zen-Spirit °°° dans le forum Flash
    Réponses: 18
    Dernier message: 28/05/2006, 01h02
  5. Ecrire un text de bas en haut
    Par kcizth dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/02/2006, 09h23

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