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 :

[JPanel][LayoutManager] redéfinition de méthodes


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier Avatar de _KB_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 92
    Points
    92
    Par défaut [JPanel][LayoutManager] redéfinition de méthodes
    Hello,

    J'ai une classe "UI" qui dérive de JPanel. Je souhaite que toutes mes classes filles possèdent un JCheckBox qui permet d'activer ou désactiver tous les composants qui seront insérés par les constructeurs respectifs.

    Pour se faire j'ai eu l'idée de redéfinir les méthodes "add" et "setLayout" entre autre afin de pouvoir continuer à utiliser ces méthodes directement (this) sans passer par un getter qui me permettrait de reccupérer le JPanel à modifier. (configPanel ici en l'occurence).

    Le problème est dans la gestion des layouts, j'ai un nullpointer exception...

    Voici le code :

    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
    public class UI extends JPanel implements Constants{
    	private JPanel configPanel;
    	
    	public UI(String  panelName) {
    		this.setBorder(BorderFactory.createTitledBorder(Interface.blackline, ""));
    		JCheckBox enableConfigPanel = new JCheckBox("Configure "+panelName);
    		configPanel = new JPanel();
    		super.setLayout(new BorderLayout());		
    super.add(enableConfigPanel, BorderLayout.NORTH);
    		super.add(configPanel, BorderLayout.SOUTH);
    		
    	
    		
    	}
    	public void enableAllComponents() {
    		Component[] components = configPanel.getComponents();
    		for (int i = 0; i < components.length; i++)
    			components[i].setEnabled(true);
    	}
    	public void disableAllComponents() {
    		Component[] components = configPanel.getComponents();
    		for (int i = 0; i < components.length ; i++)
    			components[i].setEnabled(false);
    	}
    	public void setTitleBorder (JPanel panel, String title) {
    		panel.setBorder(BorderFactory.createTitledBorder(
    				Interface.blackline, title));
    	}
    	public JPanel getPanel() {
    		return configPanel;
    	}
    	public Component add(Component comp) {
    		return configPanel.add(comp);
    		
    		
    	}
    	public void setLayout(LayoutManager layout){
    		configPanel.setLayout(layout);
    	}	
    }
    Une classe fille :

    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
    public class Settings extends UI{
    	private String family;
    	
    	private HashMapSettings hashMap;
    	
    	private JTextField sourceNameField;
    	private JComboBox familyBox;
    	private JLabel familyLabel ,sourceNameLabel, pathLabel, pathBrowseLabel ;
    	private JPanel showPanel;
    	public Settings() {
    		//panel:
    		super("Settings");
    		this.setLayout(new BoxLayout(this.getPanel(),BoxLayout.Y_AXIS));
    		this.setVisible(false);
    		hashMap = new HashMapSettings();
    		showPanel();
    		configPanel();
    		hashMap.read();
    		
    	
    	}

    en rouge les lignes qui posent problème...
    SI qqn voit plus simple je suis également preneur
    Comme le disait Heisenberg « Chérie, j’ai garé la voiture, mais je sais plus où »

  2. #2
    Membre régulier Avatar de _KB_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 92
    Points
    92
    Par défaut
    oops fausse manip

    Comme le disait Heisenberg « Chérie, j’ai garé la voiture, mais je sais plus où »

  3. #3
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Citation Envoyé par _KB_
    oops fausse manip

    C'est-à-dire ?? Résolu ? Faux message ?

    Sinon, concernant ton post, je ne vois pas trop en quoi ces lignes posent problème. Je dirais juste qu'il y a plusieurs méthodes add dans JPanel, et que tu n'en surcharges qu'une seule. Il faut peut-être surcharger d'autres méthodes (notamment addImlp, mais je ne suis pas sûr).

    Quant au BoxLayout, je te renvoie à la Javadoc qui déconseille de l'utiliser sur des JPanels, mais plutôt sur des Box.

    J'ai une question, c'est pourquoi ne proposes-tu pas de passer le composant configPanel en paramètre du contructeur ? Ca te permettrait d'y mettre des JPanel ou des Box indifféremment.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    Membre régulier Avatar de _KB_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 110
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par xavlours
    C'est-à-dire ?? Résolu ? Faux message ?
    fausse manip lors d'une édition de mon post, le problème est toujours d'actualité !

    Citation Envoyé par xavlours
    Sinon, concernant ton post, je ne vois pas trop en quoi ces lignes posent problème. Je dirais juste qu'il y a plusieurs méthodes add dans JPanel, et que tu n'en surcharges qu'une seule. Il faut peut-être surcharger d'autres méthodes (notamment addImlp, mais je ne suis pas sûr).
    je ne connais pas cette méthode je vais aller voir, mais sachant que la méthode que je souhaite redéfinir est add est pas addImlp je ne vois pas pourquoi je devrais redéfinir celle ci

    Citation Envoyé par xavlours

    Quant au BoxLayout, je te renvoie à la Javadoc qui déconseille de l'utiliser sur des JPanels, mais plutôt sur des Box.
    Je ne savais pas

    Citation Envoyé par xavlours
    J'ai une question, c'est pourquoi ne proposes-tu pas de passer le composant configPanel en paramètre du contructeur ? Ca te permettrait d'y mettre des JPanel ou des Box indifféremment.
    je ne veux pas passer configPanel en paramètre du constructeur. Je veux que ce paramètre soit transparent pour l'utilisateur des classes filles (d'ou la déclaration en private)

    C'est un peu le but que je recherche en redéfinissant les méthodes add et setLayout.

    L'utilisateur qui manipule les classes filles doit pouvoir faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    classeFille.add(Component)
    sans savoir que le composant sera ajouté au configPanel et pas au JPanel de la classe mère qui dérive de JPanel (this)

    Mais au final je me demande si je me complique pasun peu la vie
    Comme le disait Heisenberg « Chérie, j’ai garé la voiture, mais je sais plus où »

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Pour addImpl, c'est peut être pas nécessaire (je ne sais pas trop), mais tu devras surcharger le add à 2 paramètres. Moi la première chose que je ferais avec ton composant, c'est d'y mettre un BorderLayout et de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    add(machin, BorderLayout.CENTER);
    Pour la transparence, tu peux aussi utiliser un constructeur par défaut, ou des constantes pour choisir le type de contenu. C'est vrai que le fait de ne pas pouvoir utiliser de BoxLayout est dommage.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2008, 18h20
  2. redéfinition de méthode
    Par greg08 dans le forum Langage
    Réponses: 8
    Dernier message: 28/10/2008, 14h59
  3. Réponses: 8
    Dernier message: 01/07/2008, 23h15
  4. héritage et redéfinition de méthodes
    Par Braillane dans le forum Langage
    Réponses: 4
    Dernier message: 07/01/2007, 18h47
  5. redéfinition de méthode et invocation
    Par magedo dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2007, 19h00

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