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 :

[Swing] Problème de redimentionnement.


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut [Swing] Problème de redimentionnement.
    Bonjour.

    Je travaille actuellement sur un projet Java pour mes études.

    Le problème que je rencontre est lié au setDefaultLookAndFeelDecorated().

    Voilà : Au début de mon programme, je fait un appel à la méthode statique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.swing.setDefaultLookAndFeelDecorated(true)
    Or, je veux par la suite pouvoir redimentionner la fenêtre dynamiquement en faisant appel à la méthode setSize() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private void modifierDisplay()
    {
    	if (getConfiguration().getModeFractionné() == false)
    	{
    		setSize(1000,600);
    		setLocationRelativeTo(null);
    		setTitle("Touché-coulé");
    	}
    	else
    	{
    		setSize(600,600);
    		setTitle("Touché-coulé : zone adverse");
    	}
    }
    Or, lorsque j'initialise la fenêtre, aucun problème, mais lorsque je redimentionne la fenêtre en cours d'exécution par la méthode précédente, j'obtiens le bug suivant :

    - Si je redimentionne avec une taille inferieure, la fenètre est tronquée, et je n'ai plus accès aux boutons réduire, restaurer et fermer en haut à droite,
    - Si je redimentionne avec une taille superieure, le programme agrandit la fenêtre avec un carré gris sur lequel aucune interraction n'est possible.

    Si je redimentionne avec la souris en cliquant sur le bord de la fenêtre, tout rentre dans l'ordre, mais je compte au final faire appel à setResizable(false), d'où problème.

    J'ai tenté le repaint(), mais ca ne change rien.

    Any suggestion?

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut
    j'ai pris ton bout de code, je l'exécute sur l'appuis d'un bouton et ca fonctionne ...

    Tu utilise quoi comme layout pour ta fenêtre?

  3. #3
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    J'utilise pas de layout :

    En fait, je veux pouvoir placer ce que je veux où je veux, donc layout = pas besoin.
    Je place mes objets avec des setBounds().
    J'ai tenté avec différents layout, mais ca change rien.
    T'a bien mis setDefaultLookAndFeelDecorated(true) ? Parce que sans ca, ca marche.

  4. #4
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut
    Si tu n'utilise pas de layout tu place les composants par rapport au coin supérieur gauche en pixels. Donc quand tu redimensionne ta fenêtre, les composant restent a leur place, c'est tout à fait normal.

    Si tu veux qu'ils se repositionnent par rapport à la taille de la fenêtre, tu dois utiliser des layouts.

  5. #5
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    Non, le problème ne vient pas des composants, mais de la fenêtre elle même : les boutons en haut à droite ne s'affichent plus quand je rétrécis la fenêtre, et quand j'agrandis, la fenetre est étendue avec du gris. Tu veux que je poste des screenshots ?

  6. #6
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut
    Si tu veux, ou alors montre ton code et je le teste sur mon pc.

  7. #7
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    Voici quand je rétrécie :



    et quand j'agrandis :


  8. #8
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    Voici le code complet :

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    package TouchéCoulé;
     
    import javax.swing.*;
    import java.awt.event.*;
     
    public class InterfaceGraphique extends JFrame implements ActionListener, ItemListener
    {
    	private Moteur moteur;
     
    	private JMenuBar barreDeMenus = new JMenuBar();
     
    	private ButtonGroup groupe = new ButtonGroup();
     
    	private JPanel
    		zonePerso = new JPanel(),
    		zoneAdverse = new JPanel();
     
    	private JCheckBoxMenuItem
    		itemSonsActivés,
    		itemModeFractionné;
     
    	private JMenu
    		menuFichier = new JMenu("Fichier"),
    		menuOptions = new JMenu("Options"),
    		menuAide = new JMenu("?"),
    		sousMenuDifficulté = new JMenu("Difficulté");
     
    	private JMenuItem
    		itemAPropos = new JMenuItem("A propos de..."),
    		itemSauvegarder = new JMenuItem("Sauvegarder une partie"),
    		itemCharger = new JMenuItem("Charger une partie"),
    		itemQuitter = new JMenuItem("Quitter"),
    		itemOptions = new JMenuItem("Voir toutes les options");
     
    	private JRadioButtonMenuItem
    		itemFacile = new JRadioButtonMenuItem("Facile",false),
    		itemNormal = new JRadioButtonMenuItem("Normale",false),
    		itemDifficile = new JRadioButtonMenuItem("Difficile",false);
     
    	public InterfaceGraphique(Moteur m)
    	{
    		moteur = m;
     
    		initialiser();
    		mettreAJour();
    	}
     
    	public void actionPerformed(ActionEvent ae)
    	{
    		Object sender = ae.getSource();
    		if (sender == itemOptions) (new FenêtreOptions(this)).setVisible(true);
      	else if (sender == itemFacile) getConfiguration().setDifficulté(Difficulté.Facile);
      	else if (sender == itemNormal) getConfiguration().setDifficulté(Difficulté.Normale);
      	else if (sender == itemDifficile) getConfiguration().setDifficulté(Difficulté.Difficile);
    	}
     
    	public void itemStateChanged(ItemEvent e)
    	{
    		Object sender = e.getItem();
     
    		if (sender == itemSonsActivés)
    		{
        	if (e.getStateChange() == ItemEvent.SELECTED)	getConfiguration().setSonsActivés(true);
       		else getConfiguration().setSonsActivés(false);
      	}
      	else if (sender == itemModeFractionné)
      	{
      		if (e.getStateChange() == ItemEvent.SELECTED) getConfiguration().setModeFractionné(true);
      		else getConfiguration().setModeFractionné(false);
     
      		modifierDisplay();
      	}
    	}
     
    	public Configuration getConfiguration()
    	{
    		return moteur.getConfiguration();
    	}
     
    	public void mettreAJour()
    	{
    		itemSonsActivés.setSelected(getConfiguration().getSonsActivés());
     
    		sousMenuDifficulté.setEnabled(getConfiguration().getModifierNiveauIA());
     
    		if (getConfiguration().getDifficulté() == Difficulté.Facile) itemFacile.setSelected(true);
    		else if (getConfiguration().getDifficulté() == Difficulté.Normale) itemNormal.setSelected(true);
    		else itemDifficile.setSelected(true);
     
    		if (getConfiguration().getModeFractionné() != itemModeFractionné.isSelected())
    		{
    			itemModeFractionné.setSelected(getConfiguration().getModeFractionné());
    			modifierDisplay();
    		}
    	}
     
    	private void initialiser()
    	{
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
    		setJMenuBar(barreDeMenus);
    		setResizable(false);
    		setLayout(null);
     
    		itemSonsActivés = new JCheckBoxMenuItem("Sons activés",getConfiguration().getSonsActivés());
    		itemModeFractionné = new JCheckBoxMenuItem("Mode fractionné",getConfiguration().getModeFractionné());
     
    		barreDeMenus.add(menuFichier);
    		barreDeMenus.add(menuOptions);
    		barreDeMenus.add(menuAide);
    		menuFichier.add(itemQuitter);
    		menuOptions.add(itemSonsActivés);
    		menuOptions.add(itemModeFractionné);
    		menuOptions.add(sousMenuDifficulté);
    		menuOptions.add(itemOptions);
    		sousMenuDifficulté.add(itemFacile);
    		sousMenuDifficulté.add(itemNormal);
    		sousMenuDifficulté.add(itemDifficile);
    		menuAide.add(itemAPropos);
     
    		sousMenuDifficulté.setEnabled(getConfiguration().getModifierNiveauIA());
    		groupe.add(itemFacile);
    		groupe.add(itemNormal);
    		groupe.add(itemDifficile);
     
    		itemSonsActivés.addItemListener(this);
    		itemModeFractionné.addItemListener(this);
     
    		itemQuitter.addActionListener(new Quitter());
    		itemOptions.addActionListener(this);
    		itemFacile.addActionListener(this);
    		itemNormal.addActionListener(this);
    		itemDifficile.addActionListener(this);
     
    		modifierDisplay();
     
    		setVisible(true);
    	}
     
    	private void modifierDisplay()
    	{
    		if (getConfiguration().getModeFractionné() == false)
    		{
    			setSize(1000,600);
    			setLocationRelativeTo(null);
    			setTitle("Touché-coulé");
    		}
    		else
    		{
    			setSize(600,600);
    			setTitle("Touché-coulé : zone adverse");
    		}
    	}
    }
     
    class Quitter implements ActionListener {
    	public void actionPerformed(ActionEvent ae) {
    		System.exit(0);
    	}
    }
    Pour tester, supprimer le paramètre "moteur".

  9. #9
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut
    Ah ok ... j'imaginais pas ca come ca en effet !
    Tu sais montrer ton code?

  10. #10
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    Code posté juste avant ton dernier message

  11. #11
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    Essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    setLayout(new java.awt.GridBagLayout());
    ...
    //fin d'initilisation
    pack();

  12. #12
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    Oki, je teste tt de suite.

  13. #13
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    Non, ca change rien.

    J'ai pas mis le pack(), vu que j'ai pas encore d'objets dans la fenêtre, mais même avec, ca marche po...

    Je pense pas que le problème vienne du layout.

  14. #14
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut
    javax.swing.setDefaultLookAndFeelDecorated(true)

    heeeu tu n'a pas d'erreur quand tu tapes cette ligne?

  15. #15
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    Pardon, j'avais oublié une partie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.swing.JFrame.setDefaultLookAndFeelDecorated(true);
    Mais ca change rien...

  16. #16
    Membre émérite Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Par défaut
    J'ai testé ton code, sans mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JFrame.setDefaultLookAndFeelDecorated(true);
    Ca fonctionne, mais dès que je rajoute le look and feel, c'est le drame. Je pense que tu auras la fenêtre par défaut de Vinedoz...

  17. #17
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    Justement, c'est bien là le problème...

    Au pire, je supprime cette ligne, mais j'aurai bien aimé la mettre pq c'est plus beau avec...

  18. #18
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ou sinon tu récupère un joli look&feel du coté de chez JGoodies et tout de suite c'est plus beau (même que le setDefaultLookAndFeelDecorated(true) et de loin) et t'as plus de bug

  19. #19
    Membre actif
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Août 2005
    Messages : 45
    Par défaut
    Ok, merci, je vais faire comme ca.

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/08/2005, 15h33
  2. [JApplet][swing] problème d'acces
    Par soulhouf dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 26/08/2005, 18h45
  3. [Swing] Problème avec un bean et un arraylist
    Par kikoufr dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 30/09/2004, 09h08
  4. [Swing] problème d'affichage
    Par l'obstiné dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/08/2004, 18h05
  5. [SWING] Problème de rafraichissement
    Par david71 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/05/2004, 15h38

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