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 :

Gérer le contour d'une JFrame en gardant le contrôle


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Par défaut Gérer le contour d'une JFrame en gardant le contrôle
    Bonjour,

    Je cherche à déshabiller une JFrame (enlever la barre de titre et les icons pour fermer etc...) mais tout en laissant la possibilité à l'utilisateur de contrôler la fenêtre, autre autre de la déplacer. Malheureusement en utilisant "undecorated"
    on perd tout le contrôle (normal c'est la seule partie gérée par l'OS)!
    Alors y a t il un moyen soit de récupérer le contrôle de la fenêtre (déplacement ou autre) soit ce qui serait à mon avis le mieux de re-décorer cette partie de fenêtre (j'aimerais effectivement définir moi-même les couleurs ajouter du gloss, animation etc...)
    Après quelques heures de recherche je ne pense pas que cela soit possible !

    Merci d'avance si quelqu'un a une solution.

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    salut,

    Tu peut passer par une re-définition d'un Look and Feel (surement une bonne solution, susbstance le fait par exemple), mais je ne sais pas comment...

    Sans cela, rien ne t'empêche de créer une décoration en plaçant des composants pour recréer la barre des titres, la bordure de frame, les boutons pour iconifier, maximiser et fermer l'appli. Tu as un listener qui permet de récupérer les évènement (WindowListener je crois, mais je cite de mémoire). Ensuite tu peux gérer le déplacement de la fenêtre par cliquer/glisser sur la barre de titre avec MouseListener. Il te faudra aussi gérer le redimensionnement.

    Cela dit je ne sais pas si une telle solution serait pleinement satisfaisante.

  3. #3
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 754
    Par défaut
    J'avais eu le même problème et l'ai résolu assez simplement en ajoutant un MouseMotionListener sur la fenêtre ou sur la partie qui fait office de barre de titre.

    Il suffit, dans la méthode mouseDragged() du listener, de déplacer la fenêtre(méthode setLocation() de ta fenêtre) de manière correspondant au mouvement de la souris. J'ai été surpris que ça marche aussi bien.

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 754
    Par défaut
    J'ai retrouvé le source exact ça donnait:
    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
     
    int clicX=0, clicY=0;
    ...
    barreDeTitre.addMouseMotionListener(new MouseMotionAdapter() {
        public void mouseDragged(MouseEvent evt) {
            int dx = evt.getX()-clicX;
            int dy = evt.getY()-clicY;        
            setLocation(getLocation().x+dx,getLocation().y+dy);
        }
    });
     
    barreDeTitre.addMouseListener(new MouseAdapter() {
        public void mouseDragged(MouseEvent evt) {
            clicX=evt.getX();
            clicY=evt.getY();        
        }
    });

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 11
    Par défaut
    Merci pour vos réponses !
    J'ai effectivement trouvé le L&F substance qui redéfinie la barre de titre ... je me suis plongé dans le code de la librairie et j'ai pu découvrir qu'ils reconstituent la totalité de la barre en la dessinant manuellement (graphics).
    Je ne pensais pas que cela serait aussi galère et que j'avais loupé une API quelque part ...
    Pour le mouselistener, merci pour l'astuce, c'est dommage d'en arriver là car on perd la gestion de l'OS ... m'enfin bref je me rabats sur "substance" qui est quand même loin d'être trivial à customizer bien qu'il offre beaucoup de flexibilité.

  6. #6
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2011
    Messages : 3
    Par défaut Même problème.
    Bonjour,

    Tout comme uther, j'ai eu l'idée d'utiliser un MouseMotionListener sur une barre de titre personnalisée. Le problème est que je configure aussi une JMenuBar dans ma JFrame, du coup ma barre de titre personnalisée se retrouve en dessous de ma JMenuBar...
    Quelqu'un aurait-t-il une solution pour déplacer une JMenuBar a une position précise (même si je doute que ce soit possible)?

    Merci !

  7. #7
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 754
    Par défaut
    Une JMenuBar est un JComponent Swing classique, tu peux donc l'utiliser en tant que tel pour la placer ou tu le souhaites.

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le plus propre serait d'utiliser un Border que tu appliquerais sur le JRooPane.
    Comme ca plus de soucis avec les menubar ou autre, et il n'y a plsu qu'à appliquer les évènements sur le JRooPane pour gérer la souris...


    a++

Discussions similaires

  1. Reduire une JFrame
    Par MrEddy dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 16/06/2004, 15h36
  2. Interdire de redimensionner une JFrame
    Par java_math dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/06/2004, 14h59
  3. Maximiser une JFrame
    Par harold63 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 02/06/2004, 14h19
  4. Faire une JFrame avec LookAndFeel
    Par aburner dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/12/2003, 09h54
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 14h39

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