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 :

Afficher un label de manière dynamique


Sujet :

AWT/Swing Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2016
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2016
    Messages : 65
    Points : 36
    Points
    36
    Par défaut Afficher un label de manière dynamique
    Bonjour,
    J'ai une liste de questions et je veux les afficher dynamiquement donc si la liste contient deux questions seulement ces derniers s'affichent dynamiquement.
    j'ai pris un exemple de label pour essayer de l'afficher de manière dynamique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    List<Question> questions= (List<Question>) test.getQuestions();
    		int i=1;
    		int j=0;
    		for (Question question : questions) {
     
    			JLabel lblNewLabel = new JLabel("Question "+i);
    			i++;
    			lblNewLabel.setBounds(0, 0-j, 135, 14);
    			j=j+20;
    			panel.add(lblNewLabel);
    			validate();
    			repaint();
     
    		}
    Si vous avez une autre idée merci de me le dire.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu peux procéder comme tu le fais, mais :

    1. Il faut que le panel n'ait pas de LayoutManager (il modifiera les bounds que tu imposes selon ses propres règles) ;
    2. L'ordonnée du composant est erronée dans ton code : 0-j sera négatif (sauf pour j=0), donc, a part le premier, les labels seront invisibles (au dessus du sommet du panel) ;
    3. Si ton panel est lui-même mis dans un composant avec layout, il faut gérer sa taille (getPreferredSize() doit retourner un Dimension() permettant d'afficher tous les labels), à cause du layout absolu.
    4. En plus, tu utilises un incrément fixe (de 20) : il ne faut pas oublier que les tailles de polices peuvent être modifiées par l'utilisateur : ça risque de donner des résultats très moches.
    5. Il n'est pas nécessaire de faire le revalidate()/repaint() à chaque label : le faire uniquement une fois après la boucle.


    Ce n'est jamais une bonne idée de se passer de LayoutManager et de faire du layout absolu, car ça rend la fenêtre non adaptable. Tu peux réaliser un layout automatique de tes labels avec un BoxLayout par exemple.

    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
    public class BoxDemo {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Demo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            frame.add(createMultiLabelPanel());
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
     
    	}
     
    	private static JComponent createMultiLabelPanel() {
    		Box panel = new Box(BoxLayout.PAGE_AXIS);
    		for(int i=0; i<3; i++) {
    			panel.add( new JLabel("Label "+(i+1)));
    		}
    		return panel;
    	}
     
    }
    Avec un layout absolu, ça donnerait :
    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
    public class AbsoluteLayoutDemo {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Demo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            frame.add(createMultiLabelPanel());
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
     
    	}
     
    	private static JComponent createMultiLabelPanel() {
    		JPanel panel = new JPanel();
    		panel.setLayout(null);
    		int width=0;
    		int height=0;
    		for(int i=0; i<3; i++) {
    			JLabel label = new JLabel("Label "+(i+1));
    			panel.add( label );
    			label.setBounds(0, height, label.getPreferredSize().width, label.getPreferredSize().height);
    			width=Math.max(width, label.getPreferredSize().width);
    			height+=label.getPreferredSize().height;
    		}
    		panel.setPreferredSize(new Dimension(width,height));
    		return panel;
    	}
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Femme Profil pro
    Developpeur logiciel
    Inscrit en
    Juin 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 62
    Points : 74
    Points
    74
    Par défaut
    Salut.
    Le plus simple est de créer un JLabel au préalable et de lui allouer un emplacement si il doit apparaitre à un endroit bien précis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JLabel monjlabel;
    monjlabel = new JLabel(" ");
    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monJlabel.setText("tu mets ce que tu veux et il sera créé");
    Tu peux toujours agrémenter ça avec une condition pour qu'il apparaisse au moment voulu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (question == 2) {
    monjlabel.setText("ce jlabel apparaitra")
    }
    A plus !

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

Discussions similaires

  1. Afficher des éléments dans les formulaires d'une manière dynamique
    Par xZinou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/04/2013, 23h23
  2. [VBA-E]Afficher tout dans un tableau dynamique croisé
    Par alex_95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/03/2006, 13h09
  3. Réponses: 5
    Dernier message: 13/10/2005, 19h33
  4. [JTable] Changer les colonnes de manière dynamique
    Par gg2laba dans le forum Composants
    Réponses: 3
    Dernier message: 03/10/2005, 23h39

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