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

Graphisme Java Discussion :

Ne pas déplacer un JInternalFrame


Sujet :

Graphisme Java

  1. #1
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut Ne pas déplacer un JInternalFrame
    Bonjour,
    je souhaite faire en sorte que l'utilisateur puisse vérouiller et dévérouiller une JInternalFrame. J'entends par vérouiller, ne plus pouvoir l'iconifier, changer la taille, la fermer et ne plus pouvoir la déplacer et ce de façon réversible.
    Pour cela j'ai mis un JButton, lorsque le JButtone est cliqué, j'appelle setClosable(boolean c) et consoeur avec l'argument ad-hoc.

    Le seul probleme est de ne plus pouvoir la deplacer.

    J'ai un peu fouiller sur le forum et j'ai trouvé quelques suggestions dont j me suis inspiré : faire une classe fille de JInternalFrame et redéfinir setLocation().
    Je dis tout de suite que ça ne fonctionne pas du tout. En effet lorsque le composant est redessiné ce n'est pas setLocation qui est appelé, mais setBounds(int x, int y, int width, int height), que j'ai surchargée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void setBounds(int x, int y, int width, int height){
         if (isLock){
              // rester bien sage
         }
         else {
             super.setBounds(x,y,width,height); //faire comme d'habitude
        }
     }
    Et ça ne marche pas trop mal. sauf que c'est moche Voila ce que j'obtiens quand j'essaie quand meme de deplacer la fenetre lentement:
    Nom : setBounds refait lent.jpg
Affichages : 125
Taille : 19,2 Ko
    ou rapidement:
    Nom : setBounds refair apide.jpg
Affichages : 118
Taille : 17,9 Ko

    A noter que les trainées disparaissent lorsque une autre fenetre passe dessus.

    J'ai alors essayé pour voir de redéfinir exactement de la meme manière paintComponent(Graphics g), avec le risque que lorsque la fenetre est bloquée elle ne se redessine pas bien. a ma grande surprise la fenetre se redessine tres bien lorsq'elle est bloquée( enfin avec ce qu'il y a dedans c'est a dire pas grand chose reste à voir avec des trucs plus complexes... pas certain que ce soit le top) mais j'ai du coup une fenetre fantome qui se deplace lorsque j'essaie de deplacer la fenetre bloquée :
    Nom : Paint C refait 1.jpg
Affichages : 120
Taille : 19,9 Ko
    Pas propre du tout non plus meme si la fenetre fantome disparait elle aussi des qu'on deplace la troisieme fenetre (celle qui n'est pas bloquée).

    Du coup je pense qu'il faudrait intervenir plus en amont, au niveau de l'ecoute des evenements de la souris, pour appliquer le meme principe. Mais où ? J'avais dans l'idée que pour cela JInternalFrame ou une des classes meres implementait l'une des interfaces MouseListener ou MouseMotionListener, mais ce n'est pas le cas.

    Ma question est donc qui dans une JInternaFrame reçoit les évènements de la souris pour déplacer la JInternalFrame ?

    merci pour votre aide.

    Bon code,
    kerinel

  2. #2
    Membre éclairé Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Par défaut
    salut,

    j'ai tester un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    desktop.setDesktopManager(new ImmobileDesktopManager());
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import javax.swing.*;
     
    public class ImmobileDesktopManager extends DefaultDesktopManager { 
     
        public void dragFrame(JComponent f, int newX, int newY) { 
       // fenetre  pas bouger ! 
     
        } 
    }
    et cela fonctionne pas trop mal

  3. #3
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut
    Bonjour,
    j'avais pas vu la réponse plus tot, je croyais etre abonné a la discussion et je passais par la u cas ou. J'ai bien fait . J'essaie ça ce soir.
    Je vois effectivement que je devrais pouvoir resoudre le truc en faisant un test a l'interieur sur la possibilité ou non de deplacer la fenetre (car je veux pouvoir deplacer les fentres dplacable et lasser en place les fenetres non deplacables, bien sur)
    Merci beaucoup,

    bon code,
    kerinel

  4. #4
    Membre confirmé Avatar de kerinel
    Profil pro
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Par défaut
    Super ça marche impecable . Et meme pas la peine de redefinir setBounds bien entendu puisque le "message" est intercepté plus haut.

    Pour info l'implementation de dragFrame dans le ImmobiledesktopManager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void dragFrame(JComponent f, int newX, int newY) { 
       if (f.getClass()==ImmobileJInternalFrame.class) {
             // on verifie si le JComponent est une ImmobileJInternalFrame
             if (((ImmobileJInternalFrame)f).islock()){
                   // si elle est bloquée, ne rien faire
                  return;
             } 
       } 
       //sinon faire comme d'habitude
       super.dragFrame(f,newX,newY);
    }
    ce qui permet d'accepter des JInternalframe normale et plein d'autre truc, et de les laisser mobile si besoin est.

    le code de ImmobileJInternalFrame:
    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
     
    public class ImmobileJInternalFrame extends JInternalFrame{
     
             private boolean isLocked;
     
             //refaire tous les constructeurs sur le meme modele avec les paramettres ad-hoc
     
            public ImmobileJInternalFrame(){
                   super();
                   isLocked=false;
             } 
     
            public ImmobileJInternalFrame(boolean b){
                   super();
                   isLocked=b;
             } 
     
            public ImmobileJInternalFrame(String tittle){
                   super(tittle);
                   isLocked=false;
             } 
     
           public ImmobileJInternalFrame(String tittle, boolean b){
                   super(tittle);
                   isLocked=b;
             } 
     
            //etc pour les constructeurs...       
     
           // Les deux methodes pour controler le blocage /deblocage et savoir si la fenetre est bloquée ou non 
     
            public void bloquerDeBloquer(boolean b){
                      isLocked=b;
            }
     
            public boolean isLocked(){
                      return isLocked;
            }
    }
    Voila c'est impecable. merci beaucoup.

    Bon code,
    kerinel

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

Discussions similaires

  1. Je n'arrive pas à déplacer une image sur mon site
    Par guillaume7684 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 25/05/2013, 11h56
  2. Déplacer une JInternalFrame
    Par Ghorin dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 10/08/2009, 18h15
  3. tant que non apparu, ne pas déplacer
    Par pipo159 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 03/04/2008, 21h07
  4. Réponses: 9
    Dernier message: 14/02/2006, 08h03

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