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] affichage fenetre corrompu


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut [SWING] affichage fenetre corrompu
    Salut a tous,
    Je me retrouve face à un nouveau probleme.
    Je vous explique :
    J'ai monté une JFrame pour indiquer une tache en cours d'exécution de type Veuillez patienter un instant.
    Mon problème est que lorsque je lance cette fenetre en même temps qu'une tache de fond, cette Frame ne contient plus rien alors que lorsque que je la lance toute seule, c'est nickel!!!
    Je pense que ce doit être une question de Thread mais je n'y comprends rien à ces Thread!!!
    Quelqu'un pourrait m'aider?

    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
     
    package leesa;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    import javax.swing.BorderFactory; 
    import javax.swing.border.Border;
    import javax.swing.border.TitledBorder;
    import javax.swing.border.EtchedBorder;
     
    public class FenetreInstant extends JFrame
    {
        private int lEcran, hEcran ;
        private JLabel image, instant, text ;
        private JPanel pane ;
        private Image icon ;
     
        public FenetreInstant(String texte) 
        {
            init(texte);
        }
     
        public void init(String texte)
        {
            java.awt.Image icone = Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("images/myotis.png"));
            setIconImage(icone);
     
            this.setUndecorated(true);
            this.setSize(250,80);
            this.setResizable(false);
            getContentPane().setLayout(null);
     
            Border raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
     
            this.pane = new JPanel();
            this.pane.setBounds(0,0,250,80);
            this.pane.setBorder(raisedetched);
     
     
            this.icon = Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("images/ajax-loader.gif"));
            getContentPane().setLayout(null);
            this.image = new JLabel( new ImageIcon(icon));
            this.image.setBounds(100,10,image.getWidth(),image.getHeight());
            this.image.setLocation(100,10);
     
            this.instant = new JLabel("Veuillez patienter un instant...");
            this.instant.setBounds(10,60,120,20);
            this.instant.setLocation(10,40);
     
            this.text = new JLabel(texte);
            this.text.setBounds(10,80,120,20);
            this.text.setLocation(10,60);
     
            pane.add(this.image);
            pane.add(this.instant);
            pane.add(this.text);
     
            getContentPane().add(pane);
     
     
            // Centrage de la fenetre
            Toolkit tk = Toolkit.getDefaultToolkit();
            Dimension d = tk.getScreenSize(); // Resolution de l'ecran
            this.hEcran = (int)(d.getHeight());
            this.lEcran = (int)(d.getWidth());
            setLocation((lEcran-this.getWidth())/2,(hEcran-this.getHeight())/2);
     
            this.validate();
     
            setVisible(true);
        }
     
    }
    PJ : 2 screenShots exemples...

  2. #2
    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
    La cause probable de ton problème:

    http://gfx.developpez.com/tutoriel/j...ing-threading/

    Une solution un peu plus raffinée que présentée dans le cours précédent:

    http://rom.developpez.com/java-swingworker/


    Enfin avant de vérifier tout çà essie juste ton appli en virant Beryl (s'il est activé chez toi).

  3. #3
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut
    En fait, je n'y comprends pas grand choses a la gestion de threads...
    Il faut que je fasse quoi?
    Dans mon cas, je voudrai que lorsque je clique sur le bouton valider, l'action associée à ce bouton s'execute mais qu'en même temps la JFrame s'affiche.
    Une piste peut-etre?

  4. #4
    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
    Lis un peu le premier tuto il est expliqué dedans comment procéder exactement pour remédier à ton problème.

    Si tu as une tâche longue à réaliser, celle ci doit être effectuée dans un thread et pas directement dans l'actionPerformed.
    Donc grosso merdo tu vas créer un thread dans ton actionPerformed et le lancer.

    Et si tu as des modifications à faire sur l'interface graphique depuis le thread il faudra passer par la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SwingUtilities.invokeLater(Runnable r)
    Enfin quoi qu'il en soit pour faire du Swing proprement, il faut savoir utiliser correctement les threads donc au boulot...

  5. #5
    Membre éclairé Avatar de rems033
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    513
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2007
    Messages : 513
    Par défaut
    Ok dak!
    Merci pour les liens et je me mets au taff alors!

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

Discussions similaires

  1. [Swing][Thread] affichage fenetre pdt tache longue
    Par rems033 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 09/08/2007, 14h39
  2. Pb Affichage fenetre
    Par TiNoUcHe dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 15/03/2006, 10h21
  3. [SWING]affichage d'une image
    Par chico_du_33 dans le forum AWT/Swing
    Réponses: 51
    Dernier message: 08/07/2005, 09h55
  4. [Swing]Affichage d'un lien
    Par Crazyblinkgirl dans le forum 2D
    Réponses: 2
    Dernier message: 26/08/2004, 16h41
  5. [MFC] affichage fenetre
    Par mulot49 dans le forum MFC
    Réponses: 5
    Dernier message: 08/06/2004, 19h17

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