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 :

Changer de titre JFrame ailleurs que constructeur


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Par défaut Changer de titre JFrame ailleurs que constructeur
    Bonjour,

    je suis autodidacte en Java ... et donc je comprend pas toujours tout
    J'ai le code suivant et mon problème se situe dans la procédure Init() (Procédure mot venant du Basic ... en Java Méthode ?). Je passe par Init car dans mon projet je fais des calculs dedans que je n'ai pas envie de mettre dans le constructeur pour éviter de l'alourdir. Le code est en partie généré par WindowBuilder dans 'Eclipse. J'ai mis en commentaire les erreurs obtenues.
    Comment donc changer le titre de mon JFrame hors constructeur.

    Merci d'avance pour votre aide précieuse .....

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    package gui;
     
    import java.awt.EventQueue;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
    import javax.swing.JButton;
    import javax.swing.UIManager;
    import java.awt.GridBagLayout;
    import java.awt.GridBagConstraints;
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
     
    public class PourForum extends JFrame {
     
    	private JPanel contentPane;
    	private JButton button;
    	private static PourForum frame;
     
    	/**
             * Launch the application.
             */
    	public static void main(String[] args) {
    		try {
    			UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
    		} catch (Throwable e) {
    			e.printStackTrace();
    		}
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					frame = new PourForum();
    					frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
    	/**
             * Create the frame.
             */
    	public PourForum() {
    		setTitle("Titre 1");
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 621, 428);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		GridBagLayout gbl_contentPane = new GridBagLayout();
    		gbl_contentPane.columnWidths = new int[]{0, 0, 0};
    		gbl_contentPane.rowHeights = new int[]{0, 0, 0};
    		gbl_contentPane.columnWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
    		gbl_contentPane.rowWeights = new double[]{0.0, 0.0, Double.MIN_VALUE};
    		contentPane.setLayout(gbl_contentPane);
     
    		button = new JButton("Rendre invisible");
    		button.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				button_ferme();
     
    			}
    		});
    		GridBagConstraints gbc_button = new GridBagConstraints();
    		gbc_button.gridx = 1;
    		gbc_button.gridy = 1;
    		contentPane.add(button, gbc_button);
     
    		init();
     
    	}
     
    	static void button_ferme() {
    		frame.setVisible(false); 
     
    		frame.setVisible(true);                    // sert pour test uniquement
    	}
     
     
    	static void init() {
    		setTitle("Titre 2");					// Réponse Eclipse: Cannot make a static reference to the non-static method setTitle(String) from the type Frame
    		frame.setTitle("Titre 2"); 				// Pas d'erreur à la compilation mais à l'éexécution:
    												/*	java.lang.NullPointerException
    															at gui.PourForum.init(PourForum.java:87)
    															at gui.PourForum.<init>(PourForum.java:74) */
    		this.setTitle("Titre 2");				// Réponse Eclipse: Cannot use this in a static context
    	}
    }

  2. #2
    Membre émérite
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Par défaut
    Pourquoi tant de static? Enleve le static sur ta methode init, il n'a pas de raison d'être.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,


    1. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      setTitle("Titre 2");					// Réponse Eclipse: Cannot make a static reference to the non-static method setTitle(String) from the type Frame
      Une méthode static est commune à toutes les instances : elle n'a donc pas accès à une instance particulière, et donc ne saurait accèder à une méthode d'instance.

    2. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      frame.setTitle("Titre 2"); 				// Pas d'erreur à la compilation mais à l'éexécution:
      												/*	java.lang.NullPointerException
      															at gui.PourForum.init(PourForum.java:87)
      															at gui.PourForum.<init>(PourForum.java:74) */
      Lors de l'appel frame = new PourForum();, la construction de PourForum() est exécutée complètement, puis frame est affectée avec la référence de l'instance ainsi créée. Lors de l'exécution du constructeur, donc, la variable n'est pas encore affectée, donc null, d'où la NullPointerException (init() étant appelée dans le constructeur).

    3. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      		this.setTitle("Titre 2");				// Réponse Eclipse: Cannot use this in a static context
      Une méthode static est commune à toutes les instances : this représente une instance (celle dans laquelle le this est invoqué), donc il n'est pas possible d'utiliser this dans une méthode static car on ne sait pas quelle instance ça pourrait représenter.


    Le premier choix est une solution, mais, comme dit Cafeinoman, dans une méthode non static. Lors de l'appel, il faudra avoir la référence de la fenêtre. La troisième également, dans le même cadre, car elle serait équivalente.
    Le second choix est une solution, mais elle ne pourra être appelée qu'après l'affectation : comme l'affectation est faite dans l'Event Dispatch Thread, tu pourras l'appeler dans n'importe quelle méthode s'éxécutant dans l'Event Dispatch Thread. Dans les autres méthodes, dans le cas générale ça fonctionnera aussi, parce que l'exécution de la construction sera très rapide, et il y a peu de probabilité que la variable ne soit pas déjà affectée dans l'exécution d'un code ultérieure, mais c'est possible, donc l'application risque de planter de manière aléatoire, ce qu'il faut absolument éviter. La solution serait ne pas exécuter la construction dans l'Event Dispatch Thread, d'autant que ce n'est pas nécessaire, justement parce que tant que la première fenêtre n'est pas créée, il n'y a pas de risque de conflit dans ton cas.

    A noter que pour fermer définitivement une fenêtre on appelle dispose(). L'appel de setVisible(false) ne fait que la cacher (la rendre invisible).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Par défaut
    Un tout grand merci à tous les deux.
    Joël, j'avoue ne pas avoir tout compris dans les moindre détails .... mis ça me fut bien utile ... merci beaucoup.
    J'avoue que je ne sais jamais quand je doit mettre static ou non ? C'est la partie de Java que je ne maitrise pas du tout.
    Bonne journée à tous.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Gpaque Voir le message
    Joël, j'avoue ne pas avoir tout compris dans les moindre détails .... mis ça me fut bien utile ... merci beaucoup.
    N'hésite pas à poser les questions sur les points que tu ne comprends pas.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 6
    Par défaut
    Merci Joël pour ta proposition .... en plus tu as l'air pédagogue :

    Ma question est simple (mais je pense que ce n'est plus sa place).
    J'ai des difficulté avec static. Je ne sais jamais quand je dois le mettre. A quoi ça correspond ...
    C'est quoi un variable static et une méthode static .....
    Merci de ton aide.

    Bonne journée

Discussions similaires

  1. [Langage/Algorithme] deplacer une Form en cliquant ailleurs que sur la barre de titre
    Par blondelle dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/08/2013, 21h46
  2. Réponses: 2
    Dernier message: 02/06/2005, 18h12
  3. [JTable] redimensionner et changer le titre des colonnes
    Par Ghost Dog dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 19/04/2005, 20h31
  4. changer le titre de la fenêtre
    Par seb m. dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/11/2004, 15h29
  5. Réponses: 2
    Dernier message: 17/10/2002, 16h16

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