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 :

[JFrame] Basculer une JFrame sur un autre écran


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [JFrame] Basculer une JFrame sur un autre écran
    Bonjour,

    Dans l'appli que je développe, je souhaite ajouter une fonctionnalité qui permette à l'utilisateur de basculer la fenêtre de l'application (qui est une JFrame) sur un autre écran (bien évidemment dans le cas où l'utilisateur a au moins 2 écrans connectés et pas en mode mirroir).

    Je sais bien créer une JFrame sur un écran particulier, en utilisant soit l'écran par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GraphicsEnvironment.getLocalGraphicsEnvironment()
          .getDefaultScreenDevice()
    soit un écran de la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GraphicsDevice[] screens = GraphicsEnvironment.getLocalGraphicsEnvironment()
          .getScreenDevices();
    A partir de là je sais créer et utiliser ma JFrame avec l'écran par défaut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment()
          .getDefaultScreenDevice().getDefaultConfiguration();
    JFrame myJFrame = new JFrame(gc);
    ou avec un écran spécifique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    GraphicsDevice[] screens = GraphicsEnvironment.getLocalGraphicsEnvironment()
          .getScreenDevices();
    GraphicsConfiguration gc = screens[screens.length-1].getDefaultConfiguration();
    JFrame myJFrame = new JFrame(gc);
    Mais une fois que la JFrame est créée, je ne sais pas changer sa GraphicsConfiguration pour la déplacer sur un autre écran que celui sur lequel elle a été initialement créée. En effet, il n'existe pas de méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myJFrame.setGraphicsConfiguration(GraphicsConfiguration gc);
    Est-ce possible ou dois-je créer une nouvelle JFrame ?

    Merci pour vos idées.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    Est-ce que quelqu'un a des idées ?

    Merci

  3. #3
    Membre du Club

    Inscrit en
    Février 2008
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2008
    Messages : 36
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    De quelle manière voulez-vous basculer la fenetre ?

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Ma JFrame (qui est la fenêtre principale de mon application) est ouverte sur l'écran 1.
    L'utilisateur choisi la fonction "basculer sur l'autre écran" dans l'interface graphique de l'application et la JFrame bascule sur l'écran 2 en plein écran. Elle n'est donc plus sur l'écran 1.

    C'est le scénario idéal car cela ne m'arrange pas de devoir créer une nouvelle JFrame sur l'écran 2.

  5. #5
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Bonjour,

    Je pense qu'il faut passer par la méthode setLocation de JFrame :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    GraphicsDevice[] screens = GraphicsEnvironment.getLocalGraphicsEnvironment()
          .getScreenDevices();
    GraphicsConfiguration gc = screens[screens.length-1].getDefaultConfiguration();
     
    Rectangle bounds = gc.getBounds();
    myJFrame.setLocation(bounds.x, bounds.y);

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci Deadpool : c'est tout à fait exact et cela marche !
    En fait la méthode getBounds() peut renvoyer des coordonnées éventuellement négatives suivant la position du 2e écran par rapport au premier.

    Voici le code de la méthode de bascule pour les personnes intéressées. À noter que j'ai ajouté un calcul pour centrer la JFrame dans le nouvel écran si l'utilisateur démaximise la fenêtre.

    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
    GraphicsDevice[] screens = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
    if (screens.length < 2)
        { return ; }
    JFrame theFrame = this.getFrame();
    GraphicsDevice currentScreen = theFrame.getGraphicsConfiguration().getDevice();
    for (int i = 0; i < screens.length; i++)
        {
        if (screens[i] != currentScreen)
            {
            GraphicsConfiguration gc = screens[i].getDefaultConfiguration();                     
            Rectangle screenRect = gc.getBounds();
            Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(gc);
            int frameWidth = theFrame.getSize().width;
            int frameHeight = theFrame.getSize().height;
            int border = 20;
            int finalWidth = ( (screenRect.width - screenInsets.left - screenInsets.right - border) < frameWidth) ?
                    (screenRect.width - screenInsets.left - screenInsets.right - border) :
                    frameWidth;
            int finalHeight = ( (screenRect.height - screenInsets.top - screenInsets.bottom - border) < frameHeight) ?
                    (screenRect.height - screenInsets.top - screenInsets.bottom - border) :
                    frameHeight;
            int finalX = screenRect.x + screenInsets.left + screenRect.width/2 - finalWidth/2;
            int finalY = screenRect.y + screenInsets.top + screenRect.height/2 - finalHeight/2;
            theFrame.setBounds(finalX, finalY, finalWidth, finalHeight);
            theFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
            return;
            }
        }
    Merci pour votre aide et c'est donc résolu !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/06/2010, 20h42
  2. Passer d'une JFrame a une autre
    Par guitariste dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 06/05/2008, 23h01
  3. Appelle methode d'une JFrame d'une autre classe
    Par steftanguy dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 23/08/2007, 11h01
  4. [Debutant]: comment afficher une jframe d'une autre class
    Par Terminator dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 28/05/2007, 21h47
  5. Actualisé une JFrame par une autre.
    Par elgamal dans le forum Agents de placement/Fenêtres
    Réponses: 10
    Dernier message: 04/05/2007, 19h22

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