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 :

[AWT]Application qui ne se réactualise pas.


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut [AWT]Application qui ne se réactualise pas.
    Bonjour,

    Voici mon problème :

    J'ai une application constitué d'une Frame dans laquel se trouve un panel et une toolbar. Lorsque je clique sur un bouton de la barre d'outil je dessine une figure.

    Mon problème vient du fait que l'ecran n'affiche pas mon application , au lancement (pas d'erreur de compilation) la fenêtre de mon application se crée bien mais le menu n'apparait pas tous comme ma barre d'outil !

    Le menu apparait si je fais passer ma souris dessus, les boutons apparaissent si je clique en aveugle aux endroits ou ils sont supposé etre.

    Cela vient d'une fonction validate oublié , d'un repaint manquant ?

    merci d'avance






    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Bin wai dois te manquer un validate() quelque part, fais voir ton code ou tu rajoute ta toolbar et le menu, et la ou tu affiche ta fenetre

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Voici le code ou j'initialise le composant, pas sur que cela puisse aider , mais ma classe fait plus de 300 lignes , ça fais gros pour un post ici !

    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
    /Initialiser le composant
      private void jbInit() throws Exception {
        image1 = new ImageIcon(IHM.CCadrePrincipale.class.getResource(
            "dessiner-rectangle.png"));
        image2 = new ImageIcon(IHM.CCadrePrincipale.class.getResource(
            "dessiner-ligne.png"));
        image3 = new ImageIcon(IHM.CCadrePrincipale.class.getResource(
            "dessiner-cercle.png"));
        contentPane = (JPanel)this.getContentPane();
        contentPane.setLayout(borderLayout1);
        this.setSize(new Dimension(800, 600)); //ici choix resolution
        this.setTitle("Laser?");
        statusBar.setText(" ");
        jMenuFile.setText("Fichier");
        jMenuFileExit.setText("Quitter");
        jMenuFileExit.addActionListener(new
                                        CCadrePrincipale_jMenuFileExit_ActionAdapter(this));
        jMenuHelp.setText("Aide");
        jMenuHelpAbout.setText("A propos");
        jMenuHelpAbout.addActionListener(new
                                         CCadrePrincipale_jMenuHelpAbout_ActionAdapter(this));
        jButton1.setIcon(image1);
        jButton1.setText("");
        jButton1.addActionListener(new CCadrePrincipale_jButton1_actionAdapter(this));
        jButton1.addActionListener(new CCadrePrincipale_jButton1_actionAdapter(this));
        jButton1.setToolTipText("Dessiner un carre");
        jButton2.setIcon(image2);
        jButton2.addActionListener(new CCadrePrincipale_jButton2_actionAdapter(this));
        jButton2.addActionListener(new CCadrePrincipale_jButton2_actionAdapter(this));
        jButton2.setToolTipText("Dessiner une ligne");
        jButton3.setIcon(image3);
        jButton3.setToolTipText("Dessiner un cercle");
        jMenuItem1.setText("Ouvrir");
        jMenuItem1.addActionListener(new CCadrePrincipale_jMenuItem1_actionAdapter(this));
        jFileChooser1.setCurrentDirectory(null);
        jMenu1.setText("Affichage");
        jMenuItem2.setText("Dessin");
        jToolBarDessin.add(jButton2);
        jToolBarDessin.add(jButton1);
        jToolBarDessin.add(jButton3);
        jMenuFile.add(jMenuItem1);
        jMenuFile.add(jMenuFileExit);
        jMenuHelp.add(jMenuHelpAbout);
        jMenuBar1.add(jMenuFile);
        jMenuBar1.add(jMenu1);
        jMenuBar1.add(jMenuHelp);
        this.setJMenuBar(jMenuBar1);
        contentPane.add(jToolBarDessin, BorderLayout.NORTH);
        contentPane.add(statusBar, BorderLayout.SOUTH);
        contentPane.add(jPanel1, BorderLayout.CENTER);
        jMenu1.add(jMenuItem2);
    //Mise en place des ecouteurs sur JPanel1
        jPanel1.addMouseListener(new CCadrePrincipale_jPanel1_mouseAdapter(this));
        jPanel1.addMouseMotionListener(new
                                       CCadrePrincipale_jPanel1_mouseMotionAdapter(this));
     
      }
    et le code ou je construis mon cadre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Construire le cadre
      public CCadrePrincipale() {
        enableEvents(AWTEvent.WINDOW_EVENT_MASK);
        IHM.CCadrePrincipale._figures = new Hashtable(); 
        try {
          jbInit();
        }
        catch (Exception e) {
          e.printStackTrace();
        }
      }
    Je ne suis pas sur que l'instruction : IHM.CCadrePrincipale._figures = new Hashtable(); soit à sa place ici mais je ne pense pas que cela contribue mon problème.

  4. #4
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Question bete :
    Pourquoi tu as mis AWT dans le titre du topic : :

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Question bete :
    Pourquoi tu as mis AWT dans le titre du topic
    C'est pas moi c'est le moderateur du forum , mon sujet n'etait peut etre pas assez explicite.

  6. #6
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Ah oki, parceque c'est pas du AWT mais du SWING.

    Donc ta classe CCadrePrincipale c'est une JFrame non :
    Et c'est ou que tu fais le setVisible() ou le show() pour lancer ton appli ?

    Parceque apparemment ca a l'air bon, ya pas de raison que ca s'affiche pas
    A part la :
    contentPane = (JPanel)this.getContentPane();
    ou vaut mieux mettre :
    contentPane = (Container)this.getContentPane();

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Donc ta classe CCadrePrincipale c'est une JFrame non
    Et c'est ou que tu fais le setVisible() ou le show() pour lancer ton appli ?
    C'est exacte j'ai crée une classe CIHMPrincipale qui supervise la gestion de cette frame , voici son 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
    public class CIhmPrincipale {
      boolean packFrame = false;
     
      public CIhmPrincipale() {
        CCadrePrincipale frame = new CCadrePrincipale();
        if (packFrame) {
          frame.pack();
        }
        else {
          frame.validate();
        }
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = frame.getSize();
        if (frameSize.height > screenSize.height) {
          frameSize.height = screenSize.height;
        }
        if (frameSize.width > screenSize.width) {
          frameSize.width = screenSize.width;
        }
        frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
        frame.setVisible(true);
      }
     
      //Méthode main
      public static void main(String[] args) {
        try {
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch(Exception e) {
          e.printStackTrace();
        }
        new CIhmPrincipale();
      }
    }
    j'aurais du te mettre ce code avant désolé !

  8. #8
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Non bin ya pas de raison que ca marche pas
    Je te file avec le code que j'ai testé, le tien un peu remodeler, si tu vois ce qui differencie du tien

    Classe CCadrePrincipale.java
    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
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
    public class CCadrePrincipale extends JFrame{
    //Construire le cadre 
      public CCadrePrincipale() { 
        enableEvents(AWTEvent.WINDOW_EVENT_MASK); 
     
        try { 
          jbInit(); 
        } 
        catch (Exception e) { 
          e.printStackTrace(); 
        } 
      }
     
    //Initialiser le composant 
      private void jbInit() throws Exception { 
        image1 = new ImageIcon("dessiner-rectangle.png"); 
        image2 = new ImageIcon("dessiner-ligne.png"); 
        image3 = new ImageIcon("dessiner-cercle.png"); 
        contentPane = (JPanel)this.getContentPane(); 
        contentPane.setLayout(borderLayout1); 
        this.setSize(new Dimension(800, 600)); //ici choix resolution 
        this.setTitle("Laser?"); 
        statusBar.setText(" "); 
        jMenuFile.setText("Fichier"); 
        jMenuFileExit.setText("Quitter"); 
       jMenuHelp.setText("Aide"); 
        jMenuHelpAbout.setText("A propos"); 
       jButton1.setIcon(image1); 
        jButton1.setText(""); 
     
        jButton1.setToolTipText("Dessiner un carre"); 
        jButton2.setIcon(image2); 
     
        jButton2.setToolTipText("Dessiner une ligne"); 
        jButton3.setIcon(image3); 
        jButton3.setToolTipText("Dessiner un cercle"); 
        jMenuItem1.setText("Ouvrir"); 
     
     
        jMenu1.setText("Affichage"); 
        jMenuItem2.setText("Dessin"); 
        jToolBarDessin.add(jButton2); 
        jToolBarDessin.add(jButton1); 
        jToolBarDessin.add(jButton3); 
        jMenuFile.add(jMenuItem1); 
        jMenuFile.add(jMenuFileExit); 
        jMenuHelp.add(jMenuHelpAbout); 
        jMenuBar1.add(jMenuFile); 
        jMenuBar1.add(jMenu1); 
        jMenuBar1.add(jMenuHelp); 
        this.setJMenuBar(jMenuBar1); 
        contentPane.add(jToolBarDessin, BorderLayout.NORTH); 
        contentPane.add(statusBar, BorderLayout.SOUTH); 
        contentPane.add(jPanel1, BorderLayout.CENTER); 
        jMenu1.add(jMenuItem2); 
     
      }
     
      ImageIcon image1;
      ImageIcon image2;
      ImageIcon image3;
      JPanel contentPane;
      JPanel jPanel1 = new JPanel();
      JToolBar jToolBarDessin = new JToolBar();
      JLabel statusBar = new JLabel();
      JMenu jMenuFile = new JMenu();
      JMenu jMenuHelp = new JMenu();
      JMenu jMenuFileExit = new JMenu();
      JFileChooser jFileChooser1;
      JMenu jMenu1 = new JMenu();
      JMenuBar jMenuBar1 = new JMenuBar();
      JButton jButton1 = new JButton();
      JButton jButton2 = new JButton();
      JButton jButton3 = new JButton();
      JMenu jMenuHelpAbout = new JMenu();
      JMenuItem jMenuItem1 = new JMenuItem();
      JMenuItem jMenuItem2 = new JMenuItem();
      BorderLayout borderLayout1 = new BorderLayout();
      }
    Classe CIhmPrincipale.java
    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
    import java.awt.*;
    import javax.swing.*;
     
    public class CIhmPrincipale { 
      boolean packFrame = false; 
     
      public CIhmPrincipale() { 
        CCadrePrincipale frame = new CCadrePrincipale(); 
        if (packFrame) { 
          frame.pack(); 
        } 
        else { 
          frame.validate(); 
        } 
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
        Dimension frameSize = frame.getSize(); 
        if (frameSize.height > screenSize.height) { 
          frameSize.height = screenSize.height; 
        } 
        if (frameSize.width > screenSize.width) { 
          frameSize.width = screenSize.width; 
        } 
        frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); 
        frame.setVisible(true); 
      } 
     
      //Méthode main 
      public static void main(String[] args) { 
        try { 
          UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
        } 
        catch(Exception e) { 
          e.printStackTrace(); 
        } 
        new CIhmPrincipale(); 
      } 
    }

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Ok merci de ton aide.

    Je vais repotasser mon code , le probleme doit venir d'ailleurs.

    merci

  10. #10
    Nouveau membre du Club
    Inscrit en
    Juin 2004
    Messages
    45
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 45
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    J'ai pas trop regardé ton code mais pour info, j'ai déjà eu le même problème que toi. J'avais en fait mélangé des composants swing et des composants awt sans le faire exprès. Au lieu d'ajouter dans un JPanel, j'ajoutais dans un Panel. Du coup, tout mon graphique avait un comportement comme le tien.
    On ne sait jamais, ça t'aidera peut être.

    Alex

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    ok merci je vais regarder.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Apres avoir regarder differents forum mon probleme pourrait venir effectivement d'un melange Swing & Awt.

    Mais comment on fait pour n'en garder qu'un (Swing dans mon cas) si j'enleve l'import de awt je me retrouve avec pas mal d'erreurs du coup !

    Il faut que je recherche les equivalences awt -> swing (comme par exemple BorederLayout qu'il ne comprends plus ou Graphics...) ?

    merci

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Apres debug je viens de m'apercevoir que le probleme vient de ma fonction paint defini dans CCadrePrincipale.

    Si je la supprime complemetement l'application (jpanel, barre d'outile , barre de menu) apparait correctement !

    Quelqu'un voit une solution à mon problème ?

  14. #14
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Ta redefini la fonction paint de ta frame
    C'est normal alors que l'affichage ne se fasse pas correctement, comment veux-tu que le prog dessine tes composants si tu redefini la fonction de dessin

  15. #15
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    ah oui BugMaster...g omis le détail que ton CCadrePrincipale etait une frame...
    le mieux et que tu le définisse comme un JPanel
    et que tu fasse une frame externe...qui contiendra un panel d'affichage et qui lui sera ton CCadrePrincipale,
    et ainsi la méthode paint de ton cadre sera:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void paint(Graphics g) {
       super.paint(g);
       while (enum.hasMoreElements())
       //etc...
    }
    tchÔ

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    C'est bon ça marche !!

    public void paint(Graphics g) {
    super.paint(g);
    while (enum.hasMoreElements())
    //etc...
    }
    ton code est bon !

    merci à tous ceux qui m'ont aider !

    et vive developpez.net !

  17. #17
    Membre habitué Avatar de Piolet
    Inscrit en
    Février 2004
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 469
    Points : 160
    Points
    160
    Par défaut
    DEVELOPPEZ.COM

    tu le vois sur l'image en haut

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

Discussions similaires

  1. Application qui ne se quitte pas
    Par ymoreau dans le forum Qt
    Réponses: 2
    Dernier message: 10/03/2010, 10h17
  2. [WS 2003] Application qui ne se lance pas (problème de droits)
    Par beegees dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 23/02/2010, 17h34
  3. Application qui ne se termine pas
    Par Tsukaasa dans le forum Delphi
    Réponses: 3
    Dernier message: 23/03/2007, 23h46
  4. Probème d'application qui ne se lance pas sous XP
    Par ivanleterrible dans le forum Windows XP
    Réponses: 4
    Dernier message: 26/05/2006, 18h22
  5. [wxPython] Application qui ne s'arrete pas....
    Par Mr Hyde dans le forum wxPython
    Réponses: 9
    Dernier message: 10/11/2005, 16h28

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