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

avec Java Discussion :

[débutant] Cherche à mettre deux titres en paramètre d'un constructeur.


Sujet :

avec Java

  1. #21
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Ta majuscule n'est pas en cause bien que, par convention, seule les classes doivent commencer par une majuscule (une bonne habitude).

    Tu as un problème avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Fenetre (String t1, String t2);
    {
     
    }
    Car le point virgule n'est pas syntaxiquement correct !

    Enfin, pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JFrame Fenetre = new JFrame(String t1, String t2);
    Un de mes post précédent explique pourquoi le compilo n'en veux pas.
    Tu ne peux pas instancier un type JFrame avec deux arguments String car ce constructeur n'existe pas, mais ton type Fenetre lui possède un tel constructeur.

  2. #22
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Citation Envoyé par visiwi Voir le message
    Ta majuscule n'est pas en cause bien que, par convention, seule les classes doivent commencer par une majuscule (une bonne habitude).

    Tu as un problème avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Fenetre (String t1, String t2);
    {
     
    }
    Car le point virgule n'est pas syntaxiquement correct !

    Enfin, pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JFrame Fenetre = new JFrame(String t1, String t2);
    Un de mes post précédent explique pourquoi le compilo n'en veux pas.
    Tu ne peux pas instancier un type JFrame avec deux arguments String car ce constructeur n'existe pas, mais ton type Fenetre lui possède un tel constructeur.
    Arf, la honte. Ce point virgule je fais tout le temps la même erreur,
    faut que je me concentre un peu +
    Effectivement une fois enlevé la moitié des erreurs disparaissent, c'qui fait que du coup j'ai mes deux titres dans mon constructeur Fenetre.
    Je reteste.

    Grand merci visiwi

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    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
    import javax.swing.JFrame;
     
     
    public class Fenetre extends JFrame 
    {
     
    	public static void main(String[] args) 
    	{
    		JFrame fenetre1 = new JFrame();
    	}
     
     
    	String t1 = "1er Titre";
    	String t2 = "2eme Titre";
    	boolean changeTitre = true;
     
     
    	public fenetre1(String t1, String t2)
    	{
    		fenetre1.setSize(200,200);
    		fenetre1.setResizable(true);
    		fenetre1.setVisible(true);
    	}
     
     
    	public void changeTitre()
    	{
    		changeTitre = !changeTitre;
    		if (changeTitre)
    		{
    			fenetre1.setTitle(t1);
    		}
    		else
    		{
    			fenetre1.setTitle(t2);
    		}
    	}
     
    }
    Maintenant j'ai un autre souci, dans un but de rendre mon code + propre,
    j'ai remplacé mon objet Fenetre par fenetre1
    Juste un simple changement de nom, que j'ai effectué partout.
    Mon souci c'est que à chaque endroit ou j'ai mon objet "fenetre1"
    ça m'affiche une erreur sur cette même ligne.

    l'ai-je mal instancié ?
    Car j'ai essayé de retourner le problème, de rechanger de nom, etc..
    Mais je vois pas d'ou ça viens

  4. #24
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par CosaNostra Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		JFrame fenetre1 = new JFrame();
    A la fois les post précédent et ton exercice sont clairs là dessus. C'est un object "Fenetre" prenant deux String au constructeur que tu dois instancier, pas un JFrame.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    	public fenetre1(String t1, String t2)
    	{
    		fenetre1.setSize(200,200);
    		fenetre1.setResizable(true);
    		fenetre1.setVisible(true);
    	}
    Cette déclaration n'a pas de sens, la classe n'étant pas "fenetre1", ceci n'est pas un constructeur mais une méthode, mais toute méthode doit retourner une valeur. De plus, le champ fenetre1 mentionnée dans la méthode n'existe pas.

  5. #25
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Le nom du constructeur doit être le même que celui de la classe.

  6. #26
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Oups, doublon, désolé (pas assez rapide à la frappe ).

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Ok, compris (enfin je crois ^^)
    J'ai changé le nom du constructeur par le nom de la classe
    et j'ai fait la modif partout dans 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
    import javax.swing.JFrame;
     
     
    public class Fenetre extends JFrame 
    {
     
    	public static void main(String[] args) 
    	{
    		JFrame Fenetre = new JFrame();
    		Fenetre.setSize(200,200);
    		Fenetre.setResizable(true);
    		Fenetre.setVisible(true);
    	}
     
     
    	String t1 = "1er Titre";
    	String t2 = "2eme Titre";
    	boolean changeTitre = true;
     
     
    	public Fenetre(String t1, String t2)
    	{	
     
    	}
     
     
    	public void changeTitre()
    	{
    		changeTitre = !changeTitre;
    		if (changeTitre)
    		{
    			Fenetre.setTitle(t1);
    		}
    		else
    		{
    			Fenetre.setTitle(t2);
    		}
    	}
     
    }

    Je crois que j'ai juste un souci avec ma méthode changeTitre à la fin
    Il veut pas le mot Fenetre dans Fenetre.setTitle
    Il me dit un message genre qu'il y a un problème car setTitle travaille en non-static, j'ai pas très bien saisi le message d'erreur d'Eclipse.

    C'est sûrement ma méthode qui est tout simplement mal faite.
    Quelqu'un saurait me dire si il y a une faute de syntaxe dans ma dernière méthode ?

  8. #28
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Ce n'est pas la définition de ta méthode qui pose problème mais son accès.

    Java est sensible à la casse.

    Respecter les conventions aide à clarifier le code, car en faisant commencer le nom de tes instances avec une majuscule, il n'est pas aisé de les différencier avec les types (classes).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JFrame fenetre = new JFrame(); // fenetre (la première lettre en minuscule, alors que les noms de classe commencent avec une majuscule)
    En suivant le nommage ci-dessus, je ne sais pas comment tu conçois le code de la méthode changeTitre(). Soit Fenetre dans cette méthode fait référence au type, soit à l'instance Fenetre définis dans ton main. Dans tout les cas il y a une erreur. Le premier, parce c'est un appel static de la méthode setTitle(String) et que cette méthode n'est précisément pas static. Dans le second parce que l'instance Fenetre est inconnu à cette endroit, et que de plus, tu ne souhaite surement pas appeler la méthode setTitle de seulement cette instance, mais plutôt de toutes les instances.
    Pour cela, tu te sert du mot clef this pour faire référence à l'instance courante. En Java, ce mot clef est implicite ou explicite (au choix).
    Ainsi :
    est identique à:
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void changeTitre() {
    	changeTitre = !changeTitre;
    	if (changeTitre) {
    		setTitle(t1);
    	} else {
    		setTitle(t2);
    	}
    }
    Le mieux serait de créer une autre classe pour ton main, de façon à ce que ce soit plus clair pour toi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Lanceur {
     
    	public static void main(String[] args) {
    		JFrame fenetre = new JFrame();
    		fenetre.setSize(200,200);
    		fenetre.setResizable(true);
    		fenetre.setVisible(true);
    	}
     
    }
    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
    public class Fenetre extends JFrame {
     
    	String t1 = "1er Titre";
    	String t2 = "2eme Titre";
    	boolean changeTitre = true;
     
     
    	public Fenetre(String t1, String t2) 	{	
     
    	}
     
     
    	public void changeTitre() {
    		changeTitre = !changeTitre;
    		if (changeTitre) {
    			setTitle(t1);
    		} else {
    			setTitle(t2);
    		}
    	}
     
    }

  9. #29
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Et remplace ce new JFrame() par un new Fenetre(), comme on te l'a déjà dit plusieurs fois. Parce que pour le moment, t'a créé un classe que tu n'utilise même pas dans ton main

  10. #30
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Et remplace ce new JFrame() par un new Fenetre(), comme on te l'a déjà dit plusieurs fois. Parce que pour le moment, t'a créé un classe que tu n'utilise même pas dans ton main
    OK, mais pour l'instant en cours on a appris que à faire de cette manière
    du coup je comprends pas pourquoi tu veux faire new Fenetre.
    Notre enseignant nous a toujours appris jusqu'à présent de toujours faire

    Voiture c = new Voiture

    de cette façon là.

  11. #31
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    Tu as appris l'héritage ???

    Par exemple si tu as une classe "Véhicule" et une autre classe "Voiture" qui hérite de "Véhicule" tu as le droit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Véhicule vroum = new Voiture();
    car "une voiture est un véhicule" (voiture hérite de véhicule)...

  12. #32
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    OK, donc dans ce cas là je peux le faire car ma classe hérite de JFrame.

    Mais je crois que ce que je vais faire c'est deux classes distinctes,
    une pour ma main, et une autre pour faire mes constructeurs et ma méthode changeTitre sinon j'aurais l'impression de plus rien comprendre ^^

  13. #33
    Membre chevronné Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Par défaut
    Citation Envoyé par CosaNostra Voir le message
    Mais je crois que ce que je vais faire c'est deux classes distinctes,
    une pour ma main, et une autre pour faire mes constructeurs et ma méthode changeTitre sinon j'aurais l'impression de plus rien comprendre ^^
    Tu as entierement raison sur ce point
    Bien vu

  14. #34
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 75
    Par défaut
    En tous cas merci à tous pour vos explications
    Je viens vraiment tout juste de débuter donc je passe pour inculte

    Je vois mon prof demain, d'ici là soit j'aurais résolu cet exercice,
    soit je pourrais voir avec mon prof ce qui cloche et qui me bloque.

    Bonne journée tout le monde

  15. #35
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Ben oui,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fenetre fenetre  = new Fenetre(titre1, titre2);

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Débutant, cherche à mettre en place sharepoint
    Par Berserk100 dans le forum Installation
    Réponses: 4
    Dernier message: 31/03/2011, 17h12
  2. [JpGraph] mettre un titre sur deux lignes ?
    Par [ZiP] dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 09/10/2010, 18h47
  3. Réponses: 5
    Dernier message: 11/02/2009, 10h23
  4. [Débutant] Union de deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/03/2004, 11h40
  5. Mettre deux postes en réseau
    Par asphp dans le forum Développement
    Réponses: 6
    Dernier message: 13/09/2003, 19h53

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