Bannière en swing : texte défilant sur un jlabel

Soyez le premier à donner votre avis sur cette source.

Vue 8 852 fois - Téléchargée 1 438 fois

Description

Ce code permet de faire défiler un texte sur un JLabel. Il est composé de deux classes : Banniere qui permet de définir la fenêtre et de dessiner le texte, et Animateur qui redessine le texte de la bannière à intervalle de temps régulier.

Source / Exemple :


package fr.julien.banniere;

import javax.swing.BorderFactory;
import javax.swing.JLabel;

public class Banniere extends JLabel {

	private static final long serialVersionUID = 3735654525346318621L;
	private final static String ESPACE = " ";
	
	private String texte;
	private int tailleTampon;
	private int position;
	private Animateur animateur;
	
	public Banniere(String texte, int tailleTampon){
		super();
		this.texte = texte;
		this.tailleTampon = tailleTampon;
		position=0;
		setBorder(BorderFactory.createEtchedBorder());
		this.animateur=new Animateur(this);
	}

	public void avancer(){
		if(position++>tailleTampon+texte.length()){
			position=0;
		}
		dessiner();
	}
	
	private void dessiner(){
		int init=0;
		if(tailleTampon-position<0){
			init=Math.min(position-tailleTampon, texte.length());
		}
		String debut=(texte.substring(init, Math.min(position, texte.length())));
		setText(espaces(Math.max(0, tailleTampon-position))+debut);
		repaint();
	}
	
	private static String espaces(int nombre){
		StringBuilder sb = new StringBuilder();
		for(int i=0; i<nombre; i++){
			sb.append(ESPACE);
		}
		return sb.toString();
	}
	
	public void start(){
		animateur.start();
	}
	
	
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
3
Date d'inscription
mercredi 27 novembre 2013
Statut
Membre
Dernière intervention
28 novembre 2013

je sais pas pourquoi tooutt vos projet ne fonctionnent pas !! ça m'affiche tjrs des erreurs :\ ... pourtant j aime tes sujets :(
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
366
Bonjour,

Merci pour ton commentaire.

Pour la méthode pause ou stop, elle est définie dans l'animateur (C'est un Thread) j'ai juste oublié de généré les getters/setters sur le booleen actif, mais cette fonctionnalité était prévue.

Pour tes suggestion : oui, j'aurais pu faire un programme différent mais j'ai fait celui là...

La taille tu tampon n'est pas la taille du JLabel mais le nombre de caractères qui sont affichés
Messages postés
20
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
17 janvier 2012

Je suis en train d'essayer ton code finalement et je me demandais pourquoi tu as définit le second paramètre de Banniere à 90 (tailleTampon) plutôt qu'une autre valeur ?
J'ai cru au début qu'il s'agissait de définir la largeur du JLabel mais en mettant 200 par exemple ça marche plus du tout comme prévu.
Ensuite j'ai compris une grosse parti du code mais j'essayais d'écrire une méthode reculer pour m'exercer. La problématique est simple mais je sais pas pourquoi je n'y arrive pas... Peut-être parce que je n'ai dormi que 3h et que j'ai pas l'impression de pouvoir réfléchir sainement du coup... xD
A partir de là on aurait pu définir le sens de défilement du texte depuis le constructeur.

Ensuite pourquoi pas de méthode pause ou stop ? Déjà pour pouvoir arrêter le message si on veut et ensuite pour avoir une méthode simple de faire des animations plus sensiblement plus étoffées du genre afficher le texte puis quand il est centré sur le JLabel faire une petite pause avant de reprendre l'animation.
Sinon ça marche bien. :)
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
366
Merci pour ton commentaire (même si tu n'as pas essayé :) )
Messages postés
20
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
17 janvier 2012

Pas essayé mais c'est sympa comme code... ^^

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.