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 :

pas d'affichage après ajout d'un nouveau label


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 10
    Points
    10
    Par défaut pas d'affichage après ajout d'un nouveau label
    Bonjour,

    dans le cadre d'un stage j'essaye de concevoir une interface Java. J'ai suivi les tutos Introduction au dessin en Java et Les bases de la création d'une interface graphique pour m'aiguiller.

    Je suis actuellement le deuxième et j'ai des erreurs qui apparaissent dans ma console au lancement de l'interface et je ne sais pas à quoi elles sont dues car elles disparaissent aussitôt et je n'ai donc pas le temps de les lire.

    Deuxième soucis :
    J'ai deux classes MyFrame (extends JFrame) et MyPanel (extends JPanel). J'ajoute mes Component depuis une classe Main à l'aide de méthodes que j'ai implémentées (type "addLabel", "addBouton", etc). Jusque là ça fonctionne (à part les erreurs au lancement).
    Lors du clic sur le bouton, dans la méthode actionPerformed de ma classe AutoParsingAction (extends AbstractAction) je souhaite affiché un texte dans l'interface. J'ai donc enregistré le MyPanel lors de la construction du AutoParsingAction pour avoir accès à l'interface. Je me sert de la méthode addLablel (qui fonctionne très bien quand je l'appelle depuis le Main) et là rien ne s'affiche !
    Je pense que le label est ajouté mais pas affiché. Comment faire ? Est-ce que ça a un rapport avec ces erreurs au lancement ??

    Merci d'avance à qui pourra m'aider, ou essayer (ce sera déjà très gentil !).

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    pour ton affichage a tu fait un repaint() ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Heu...
    En fait j'ai essayé avec un repaint mais j'ai pas implémenté de méthode paint donc je suis pas sûre que ça serve.
    Est-ce qu'il faudrait que je le fasse ?

    Parce que dans les Components que j'ajoute depuis le Main sont affichés. Pourquoi alors pas le texte que j'ajoute ?

    J'ai penser à la méthode update aussi mais elle prend un paramètre un Graphics et je ne sais pas quoi lui donner, j'ai pas très bien compris à quoi ça correspondait...

    Un peu de code si ça peut vous aider (mon problème se trouve au niveau de la classe AutoParsingAction) :
    MyPanel
    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
    public class MyPanel extends JPanel{
    	MyFrame fenetre;
    	HashMap<String, Component> map;
     
    	public MyPanel(Color color, MyFrame fenetre) {
    		this.fenetre=fenetre;
    		setBackground(color); // définition de la couleur de fond
    		setLayout(new FlowLayout()); // gestion des composant par défaut : retour à la ligne quand le bord est atteint
     
    		map=new HashMap<String, Component>();
    	}
     
    	public void addLabel(String nom, String texte){
    		JLabel label = new JLabel(texte); // on crée le texte
    		System.out.println("ajout...");
    		add(label); // on l'ajoute
    		System.out.println("ajouté");
    		map.put(nom, label);
    	}
     
    	...
     
    	public void addBoutton(String nom, AbstractAction action){
    		JButton bouton = new JButton(action); // on le crée et on lui affecte son action
    		add(bouton); // on l'ajoute
    		map.put(nom, bouton);
    	}
     
    	public void addListe(String nom, Object[] champs){
    		JComboBox liste = new JComboBox(champs); // on le crée avec ses champs
    		add(liste); // on l'ajoute l'ajoute
    		map.put(nom, liste);
    	}
     
    	public Component getComponement(String nom) {
    		Component compo = map.get(nom);
    		return compo;
    	}
    }
    Main
    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
    public class Main {
    	public static void main (String[] args){
    		/* Interface graphique */
    		SwingUtilities.invokeLater(new Runnable(){
    			public void run(){
    				//On crée une nouvelle instance la fenêtre
    				// création + configuration + mise en place des composants
    				MyFrame fenetre = new MyFrame( new FrameSet("Filtre des catalogues Fournisseurs", 400, 300, true, true, JFrame.EXIT_ON_CLOSE), new Color(230, 240, 254)); 
    				fenetre.setVisible(true);//On la rend visible
     
    				// récupération du panel
    				MyPanel panel=fenetre.getPanel();
     
    				/* ajout des composants */
    					// parsing automatique
    					panel.addLabel("label1", "...");
    					String[] champs1 = new String[]{...};
    					panel.addListe("menu1", champs1);
    					panel.addBoutton("filtrer", new AutoParsingAction("filtrer", panel));
     
    					//parsing manuel
    					panel.addLabel("label2", "...");
    					panel.addZoneDeSaisie("url", 12);
    					String[] champs2 = new String[]{...};
    					panel.addListe("menu2", champs2);
    					panel.addBoutton("filtrer", new ManParsingAction("filtrer", panel));
    			}
    		});
    	}
    }
    AutoParsingAction
    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
    public class AutoParsingAction extends AbstractAction {
    	MyPanel panel;
    	
    	public AutoParsingAction(String nom, MyPanel panel) {
    		super(nom);
    		this.panel=panel;
    	}
    	
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		String fournisseur = (String)((JComboBox)panel.getComponement("menu1")).getSelectedItem();
    		List<ProviderList> pal = new ArrayList<ProviderList>(); // variable inutile par la suite : d'où le block.
    		
    		if(fournisseur.compareTo("Tous")==0){
    			// tous
    			pal.add(...);
    			...
    		}else if(...){
    			...
    		}else{
    			...
    		}
    		
    		// initialisation de la liste des provider à partir de l'analyse ci-dessus.
    		Provider[] provList = new Provider[pal.size()];
    		Iterator<ProviderList> it = pal.iterator();				
    		for(int i=0; i<pal.size(); i++){
    			provList[i]=setProvList(it.next());
    		}
    		
    		for(int i=0; i< provList.length; i++){
    			System.out.println("filtre de "+provList[i].getName());
    			// Mon problème :
    			panel.addLabelMultiLigne("info1","filtre de "+provList[i].getName()+"en cours...<br/>Veuillez patienter.");
    		}
    		
    	}
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    il manque le code de cette fonction

    panel.addLabelMultiLigne();

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Au temps pour moi, c'est juste. Mais le problème ne vient pas de cette méthode car (dans le doute) j'ai essayé avec la méthode addLabel toute simple et ça ne fonctionnait pas mieux.

    J'ajoute quand même le code manquant :
    MyPanel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MyPanel extends JPanel{
    	...
    	public void addLabelMultiLigne(String nom, String texte){
    		JLabel label = new JLabel("<html><body>"+texte+"</body></html>"); // on crée le texte
    		System.out.println("ajout...");
    		add(label); // on l'ajoute
    		System.out.println("ajouté");
    		map.put(nom, label);
    	}
    	...
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    a la fin de cette méthode si tu ajoute this.repaint(); ça ne marche pas mieux ?

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

Discussions similaires

  1. Config Apache après ajout d'un nouveau war
    Par khoufouq dans le forum Websphere
    Réponses: 1
    Dernier message: 23/07/2012, 15h33
  2. Réponses: 3
    Dernier message: 10/05/2007, 07h43
  3. Mandriva refuse de demarrer apres l ajout d un nouveau dd
    Par Cazaux-Moutou-Philippe dans le forum Administration système
    Réponses: 6
    Dernier message: 24/03/2006, 10h57
  4. Réponses: 6
    Dernier message: 10/07/2004, 12h19
  5. Kernel Panic après ajout d'une nouvelle partition
    Par GLDavid dans le forum Administration système
    Réponses: 6
    Dernier message: 25/06/2004, 16h47

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