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

Agents de placement/Fenêtres Java Discussion :

cursor d'une jframe avec une jdialog


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut cursor d'une jframe avec une jdialog
    boujours !
    Voilà j'ai un petit problème. J'ai deux méthode freeze et unfreeze qui me permette de faire patienter l'utilisateur lors d'un traitement sur le serveur.
    Ces fonctions active - désactive les champs des formulaires, et modifie la souris.
    Le problème c'est que lorsque j'ai une jdialog d'ouverte, le curseur se modifie que sur la jdialog et pas sur la frame. J'ai beau appeler mes fonctions à la fois sur la jdialog et la jframe, ça marche pas.

    voici le code des fonctions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void freeze(Container container){
            container.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            container.setEnabled(false);
        }
     
        public static void unfreeze(Container container){
            container.setCursor(Cursor.getDefaultCursor());
            container.setEnabled(true);
        }
    Je sais pas si c'est un bug ou autre ....

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut.
    quand tu ouvre ton JDialog, ta fenêtre devient inactive
    et elle peut plus recevoir le focus du clavier et les évènements souris

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    salut slim_java, merci de ta réponse.

    Si j'ai bien compris, lors d'une ouverture d'une jdialog, la jframe n'est plus active, mais ça dépends pas du faite qu'elle soit modal ou pas la jdialog? j'ai tester en modal et sans, le résultat est le même.

    Sinon connaitrais tu une alternatives , ressource, autre que le curseur pour faire patienter? Genre une grosse image qui camoufle à la fois la jdialog et la jframe?

  4. #4
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par kimjoa Voir le message
    qu'elle soit modal ou pas la jdialog? j'ai
    effectivement.
    tu dois jouer sur la modalité de ton JDialog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    JDialog(Dialog owner, boolean modal)
    Creates a dialog box with the specified owner Dialog and modality
    pour plus d'info, tu peux voir ci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    ok slim_java, j'ai testé tout les type de modalité, sans résultat.

    Toujours pas de curseur wait, sur ma frame si elle à une dialog

  6. #6
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    ça se n'est pas normal.
    Envoie ton code, il doit y avoir un truc qui ne tourne pas rond dedans
    Il était une fois [...] Et ils vécurent heureux et eurent beaucoup d'enfants!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    ok, alors j'ai une classe qui gèreet génère les Main , (une à la fois) et une classe mainFrame qui génère et gère des jdialogues (une à la fois)

    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
     
    public class MainFrame extends JFrame {
         private static JDialog dialog = null;
     
        public void addDialog(String className) {
            dialog = new JDialog(this, true);
            dialog.setResizable(false);
            dialog.setUndecorated(true);
            AbstractSelfPanel panel = null;
            try {
                try {
                    panel = (AbstractSelfPanel) Class.forName(className).newInstance();
                    JXTitledPanel titledPanel = new JXTitledPanel(panel.getTitle());
                    titledPanel.setBorder(new DropShadowBorder());
                    titledPanel.add(panel);
                    dialog.add(titledPanel);
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {}
            } catch (ClassNotFoundException ex) {}
            dialog.pack();
            dialog.setLocationRelativeTo(null);
            dialog.setVisible(true);
        }
     
        public void disposeDialog() {
            dialog.dispose();
        }
     
        public void packDialog() {
            dialog.pack();
        }
     
    }
    ensuite j'ai un controlleur sur un boutton de la dialog

    public class ConfigAction extends AbstractFormAction implements ActionListener {
    private final ConfigPanel panel;


    public ConfigAction(ConfigPanel panel) {
    this.panel = panel;
    }

    public void actionPerformed(ActionEvent e) {
    Main.freezeFrame();
    .....
    Main.unfreezeFrame();
    }

    }
    et donc les fonction freeze et unfreeze

    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
    public class Main {
     ....
        private static JFrame currentFrame;
     
        public static void freezeFrame(){
            currentFrame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            currentFrame.setEnabled(false);
        }
     
        public static void unfreezeFrame(){
            currentFrame.setCursor(Cursor.getDefaultCursor());
            currentFrame.setEnabled(true);
        }
     
    }
    voilà , je suis sous windows 7 et bosse avec netnean ....

  8. #8
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    protected void actionPerformed(ActionEvent e) 
        {
            JDialog dialog = new JDialog(this, false);
            dialog.setBounds(100,100,100,100);
            fenétre.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
            dialog.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); 
            dialog.setVisible(true);
        }

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    ba j'ai testé tout les types de modalité slim_java

  10. #10
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    dans la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static void freezeFrame()
    {         currentFrame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
     currentFrame.setEnabled(false);
    }
    je pense que tu devras supprimer la ligne en rouge

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    non ça n'a aucun effet

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    bon j'ai réglé le problème , mais j'ai pas compris d'où venait le bug.

    En faite après avoir mit mon curseur, j'effectue une requête vers le serveur, via une classe exprès ... Et le truc c'est que en propageant les erreurs sql possible au lieux de les intercepter, tout marche nickel ?? Pourquoi !! J'en sait rien surtout que j'ai pas réussi à recréer cette erreur , hors de mon appli.....
    Donc c'est un bug c'est sur.....

  13. #13
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par kimjoa Voir le message
    le truc c'est que en propageant les erreurs sql possible au lieux de les intercepter, tout marche nickel ??
    même s'il y a pas d'exception au cours de l'exécution ?

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    non y'avais aucune exception ... c'est pour ca c'est bizarre ..

  15. #15
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par kimjoa Voir le message
    c'est pour ca c'est bizarre ..
    j'espère que tu as bien vérifié

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    En faite y'a des erreurs sql quand l'utilisateur rentre des mauvais paramètre de connexion, mais sinon même si y'a pas d'erreurs ca bug ....donc je sais vraiment pas d'où ca peux venir , surtout que j'arrive pas à recréer la même erreur ailleurs que dans mon aplli ...

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    bon en faite de propager les exception ca ne résout rien, j'avais une petite erreur.....

    Du coup j'arrive à recréer la même erreur ailleurs que dans mon appli .... voici le code qui génère l'erreur (en faite sans est pas une c''est juste que la sourie se modifie pas)

    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
     
    public class Main extends JFrame{
     
     
        public static Main frame;
     
     
        public Main(){
            super();
     
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            setVisible(true);
            setExtendedState(MAXIMIZED_BOTH);
     
        }
     
        public  void  addDialog(){
            JDialog dialog = new JDialog(frame, false);
            dialog.add(new JButton(new AbstractAction("test"){
                public void actionPerformed(ActionEvent e) {
                    Main.frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                    try {
                        DriverManager.getConnection("jdbc:mysql://localhost:3306/self", "root", "");
                    } catch (SQLException ex) {
                        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    Main.frame.setCursor(Cursor.getDefaultCursor());
                }
     
     
            }), BorderLayout.SOUTH);
     
            dialog.add(new JLabel("du contenue"));
     
            dialog.pack();
            dialog.setLocationRelativeTo(null);
            dialog.setVisible(true);
        }
     
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            initFrame();
        }
     
        public static synchronized  void initFrame() {
            SwingUtilities.invokeLater(new Runnable(){
                public void run(){
                    Main.frame = new Main();
                    frame.addDialog();
                }
            });
        }
     
    }

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    bon j'ai la même erreur mais cette fois pour la méthode sleep du thread.
    La sourie ne change pas. Mais si j'omets de redéfinir le cursueur pas défaut à la fin du sleep, alors le curseur change en wait , mais à la fin du sleep, au lieux du début ....

    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
    public  void  addDialog(){
            JDialog dialog = new JDialog(frame, false);
            dialog.add(new JButton(new AbstractAction("test"){
                public void actionPerformed(ActionEvent e) {
                    Main.frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                      try {
                            Thread.currentThread().sleep(2000);
                        } catch (InterruptedException ex) {
                            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                        }
     
                    //Main.frame.setCursor(Cursor.getDefaultCursor());
                }
     
            }), BorderLayout.SOUTH);
     
            dialog.add(new JLabel("du contenue"));
     
            dialog.pack();
            dialog.setLocationRelativeTo(null);
            dialog.setVisible(true);
        }
    Trop bizarre si j'applique le curseur sur la dialogue alors ca marche ... est-ce un problème de thread des composant swing??

    Dois-je envoyé un rapport d'erreur ? pourriez vous testé de votre coté ??

  19. #19
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    le traitement que tu as fait dans la méthode actionPerformed s'exécute plus rapide que tu imagine ce qui entraine l'exécution de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Main.frame.setCursor(Cursor.getDefaultCursor());
    ...tu as touché à la solution en pensant à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread.currentThread().sleep(2000);
    mais ca bloque l'EDT.

    pour être pratique, je vais te donner un exemple " QDOS " vite fait mal fait pour l'essayer et voir si ca marche.
    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
     
     public void actionPerformed(ActionEvent e) 
                {                             
           Main.frame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                    Thread monThread  = new Thread()
                    {
                        public void run()
                        {
                          //sleep(2000);
                        for (int i=0;i<99999;i++)
                             System.out.println("ca va marcher !!");
     
                        Main.frame.setCursor(Cursor.getDefaultCursor());
                        }
                    };
                    monThread.start();
                    }

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    T'es trop fort slim_java

    ca marche nickel, j'ai plus qu'a adapté ca à ma sauce

    Merci beaucoup !! a+

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. Insérer une légende dans une image avec une police plus petite
    Par Paulinho dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 29/04/2006, 14h19
  5. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24

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