CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[JAVA] Listeners -> Action sur Container

Earthdigger
Earthdigger
Niveau 10
11 février 2011 à 20:12:09

Bonjour à tous,

Au sein d'une classe Exemple, j'ai créé une sous-classe BoutonListener (réalisant ActionListener) sur un JButton "Bouton".

Quand l'utilisateur clique sur ce bouton, la classe BoutonListener est appelée et doit retirer un des composants d'un Container appelé c (attribut de la classe Exemple).

Ca fait quelque chose comme ça :

public class Exemple extends JFrame {
private Container c ;

public Exemple() {...} //le constructeur

public class BoutonListener implements ActionListener {
public void ActionPerformed(ActionEvent e) {
c.remove(1) ;
}
}
}

Or rien ne se passe quand on clique...
Il ne s'agit pas d'un problème d'affectation de Listener au bouton (quand on remplace c.remove(1) par un System.out.println("blabla"), ça marche)...
J'imagine qu'on ne puisse pas si facilement le contenu d'un Container... Mais pourquoi ? Et comment contourner le problème ?

Merci d'avance :D

Earthdigger
Earthdigger
Niveau 10
11 février 2011 à 20:14:12

Désolé pour le double-post... Désolé pour l'indentation du code, qui n'est pas passée.

godrik
godrik
Niveau 30
11 février 2011 à 20:23:47

Que vaut c ?
quel est le parametre de remove ?

Pour avoir du code indente, utilise un wall. Par exemple, pastebin.com

Earthdigger
Earthdigger
Niveau 10
11 février 2011 à 20:31:05

Salut Godrik, merci pour la réponse rapide.

Une version plus détaillée du code épuré : http://pastebin.com/sfmi9K9a

c est donc un Container en mode BorderLayout : http://download.oracle.com/javase/tutorial/uiswing/layout/border.html

L'instruction c.remove(n) est censée retirer le n-ème composant que j'ai ajouté (par c.add(Component c0)).
En gros, dans mon cas, c.remove(0) revient à supprimer tout le menu supérieur de ma fenêtre.

Ce qui me surprend plus particulièrement, c'est que l'instruction c.remove(n) marche bien si je la place dans mon programme principal. Par contre, une fois dans le Listener, l'affichage n'est pas mis à jour... Pourtant, le Container c est bien modifié (cf. test en commentaire).

godrik
godrik
Niveau 30
11 février 2011 à 20:40:02

et l'enregistrement du listener ?
Fournit un code complet.

NoSoul_
NoSoul_
Niveau 7
12 février 2011 à 01:11:11

Je suppose que tu n'as pas fait de validation après la suppression.

Si tu ajoutes et/ou supprimes des composants d'un container qui a été affiché alors il faut appeler la méthode validate() après les modifications.
Si tu faits plusieurs ajouts ou suppressions, il suffit d'appeler une fois validate().

En résumé (et si c'est bien ça), il suffit de mettre ceci à la place du System.out.println(...):

c.validate();

Earthdigger
Earthdigger
Niveau 10
13 février 2011 à 01:18:32

Bonsoir à tous,

Merci pour la proposition...
En effet, un validate() met à jour l'affichage de mon Container...
Mille fois merci, vraiment. J'ai perdu des heures à essayer divers trucs sans mettre la main dessus...

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment