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 :

Mega débutant, fenetre vide (swing)


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut Mega débutant, fenetre vide (swing)
    Bonjour,

    Lassé des fuites mémoires du C, je fait ce soir mes 1er pas en Java. Je viens d'installer eclipse et de trouver tout un tat de tutoriels mais... a part le hello word en console, aucun ne marche...

    Mon objectif 1er est de créer une fenetre avec rien dessus. juste une fenetre.
    j'ai le code suivant :

    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
    41
    42
     
     
    import javax.swing.*;
    import java.awt.event.*;
    /**
     * @author steph
     *
     */
    public class page1 extends JFrame
    {
     
    	/**
             * @param args
             */
     
    	public void page1() 
    	{
    		super("page 1");		
    		WindowListener l = new WindowAdapter() 
    		{
    			public void windowClosing(WindowEvent e)
    			{
    				System.exit(0);
    			}
    		};
    		addWindowListener(l);
    		setSize(200,100);
    		setVisible(true);		
    	}
     
    	public static final long serialVersionUID = 1;
     
     
    	public static void main(String[] args) 
    	{
    		// TODO Auto-generated method stub
     
    		JFrame frame = new page1();
    		System.out.println("yop");
    	}
     
    }
    et une 1er erreur a la ligne
    erreur : Constructor call must be the first statement in a constructor...

    D'apres ce que j'ai compris, ce "super" sert a appeler le constructeur de la class parente (vu que je dérive de JFrame, je suppose que mon parametre correspond dans mon cas au titre de la fenetre).

    Mon constructeur est donc bien le 1er truc appelé dans ma méthode, et je comprend vraiment pas pourquoi il me met une erreur...

    Quelqu'un pourrait m'expliquer ?

    ps : vraiment désolé pour le niveau de la question... j'y connais vraiment rien en Java, et je peux pas faire une recherche google sans avoir 10 abréviations (ou noms de plugins) que je connais par ligne.

    - - - edit - - -

    J'ai trouvé ça en cherchant de l'aide sur mon erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     //============ Constructor (same as in above example)
        public Point(int x, int y) {
            super();  // Automatically done if you don't call constructor here.
            m_x = x;
            m_y = y;
        }
    J'ai donc enlevé la ligne qui m'ennuyais, et j'ai testé... L'erreur disparait (pourquoi???) et le programme se lance.

    Il m'affiche "yop" dans la console, mais pas de fenetre...

    De plus, je vien de remarquer qu'en mettant dans le main un frame.show(), pouf, ma fenetre apparait avec des dimensions nulles. J'ai donc également sorti le setsize et pouf, la fenetre s'affiche avec les bonnes dimensions. J'en vien a penser que le constructeur ne marche pas du tout... cela veut dire qu'il n'a pas instancié mon listener non plus ? (lui, impossible de le sortir, il reconnais plus le type sinon)

    y me barre aussi mon show et me dit que c'est "deprecated"... seulement, c'est la seule chose qui marche que j'ai trouvé :/

    Je sentais bien que j'allais pas être copain avec java :p

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    La premiere erreur vient du fait que tu as affecte un type de retour a ton constructeur (les constructeurs n'ont pas de type de retour - enleve le void qui est devant). C'est aussi pour cela que ton constructeur n'est pas du tout appele. C'est la meme chose en C++ d'ailleurs.
    Tu peux sans probleme appeler un constructeur avec arguments depuis une classe fille.

    Sinon ce code-ci est plus leger et faire sensiblement la meme chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class TestFrame {
      /** Program entry point.
      * @param args Arguments from the command line.
      */
      public static void main(String... args) {
         JFrame frame = new JFrame("Test");
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frame.setSize(300, 200);
         frame.setVisible(true);
      }
    }
    Note : si ton IDE t'embete avec le String... args, remplace-le par un String[] args.

    Note : attention aux conventions de nommage des classes (doit commencer par une lettre majuscule : page1 => Page1). Penser a renommer le fichier source egalement.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    Excellent merci ^^

    J'aurais jamais trouvé :p

  4. #4
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    Je suis d'accord avec vous mais je trouve qu'il y a une façon beaucoup plus simple d'afficher une fenetre vide comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import javax.swing.*;
     
    public class Prin extends JFrame {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Prin fen = new Prin();
     
    		fen.setTitle("Ma fenêtre");
    		fen.setBounds(400,200,300,150);
    		fen.setVisible(true);
    	}
     
    }
    Sinon j'aurais une question j'ai vu que par convention on place les déclarations des champs à la fin de la classe mais je trouve que c'est beaucoup plus simple notemment pour la relecture de les placées au début.

  5. #5
    Membre émérite
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Par défaut
    A part le setBounds (et l'evenement close), c'est exactement pareil que la méthode de bouye non ?

    - - -

    sinon, pour répondre aux notes de bouye, les conventions, genre majuscule ou où déclaré quoi, c'est le genre de question que je me pose pas vraiment pour le moment dans la mesure ou ce que j'écrit ne deviendra jamais un vrai programme :p

    Je m'essaye au JAVA pour le plaisir et par curiosité (je bosse en PHP pour le boulot ), et j'ai juste envie de voir la philosophie du langage et si c'est réellement aussi facile de coder avec qu'on le prétend.

    Si j'arrive a copiner avec ce langage et que j'en viens à m'en servir pour de bon, a ce moment là oué, je commencerai a coder proprement

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Il manque la gestion de la fermeture ce qui fait que le programme continuera a tourner apres la fermeture de la fenetre. Cela peut etre fait en faisant setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ou en rajoutant un WindowListener/WindowAdapter qui fait System.exit(0) quand l'evenement windowClosing est recut.

    Ensuite j'ai suivit une regle de pattern/conception de base qui est : "Il vaut mieux composer (utiliser la delegation) qu'heriter a tout va".

    Note que mon code (ou meme celui d'Eclipse) n'est pas non-plus super juste, il est juste "simple". On manipule en effet la frame (un composant Swing) dans la thread du main; normalement on devrait manipuler la frame dans l'EDT (la thread de SWT/Swing) en utilisant SwingUtilities.invokeLater() ou SwingUtilities.invokeAndWait().

    Citation Envoyé par benjiprog
    Sinon j'aurais une question j'ai vu que par convention on place les déclarations des champs à la fin de la classe mais je trouve que c'est beaucoup plus simple notemment pour la relecture de les placées au début.
    Je n'ai jamais vu ca nulle part. En fait tu peux declarer tes champs la ou bon te semble. La plupart des gens les mettent au debut pour des raisons historiques (ils ont appris le C en premier) ou des raisons de lisibilite, mais dans le code source de Swing par exemple, certains champs sont declares juste au dessus des methodes qui les utilisent (donc en plein milieu de la classe). Suis les recommendations de ton entreprise/chef de projet.

    Pour les regles de formattage de base sont decrites dans la et sont simples :
    - les noms de classe commencent avec une majuscule avec chaque sous-mot commencant par une majuscule.
    - les noms de membres d'instances et de methodes (statiques ou non) commencent avec une minuscule avec chaque sous-mot commencant par une majuscule.
    - les noms des membres statiques sont en majuscule et chaque sous-mot est separe par un "_".
    - les noms des packages sont en minuscule (la plupart du temps).
    Ceci dit meme dans l'API ces regles sont de temps a autre violees. Encore une fois : suis les recommendations de ton entreprise/chef de projet.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. [Forms 9.0.4] Fenetre vide avec juste le menu?
    Par Aeternus dans le forum Forms
    Réponses: 7
    Dernier message: 22/06/2007, 15h11
  2. Réponses: 4
    Dernier message: 09/01/2007, 21h33
  3. LNK1201 en voulant afficher une fenetre vide
    Par 180degrés dans le forum MFC
    Réponses: 3
    Dernier message: 18/08/2005, 00h17
  4. [Débutant]Utilisation de swing
    Par OtI$ dans le forum Débuter
    Réponses: 10
    Dernier message: 01/12/2004, 21h27
  5. [débutant]fenetre sans bordure
    Par crazypiou dans le forum DirectX
    Réponses: 2
    Dernier message: 01/05/2004, 18h43

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