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 :

Gérer deux moniteurs, cela ne marche pas


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 50
    Par défaut Gérer deux moniteurs, cela ne marche pas
    Bonjour
    J'essaye de mettre en place la gestion de deux moniteurs
    Voici le code utilisé
    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
     
    import java.awt.GraphicsConfiguration;
    import java.awt.GraphicsDevice;
    import java.awt.GraphicsEnvironment;
    import java.awt.Toolkit;
     
    public interface GlobalVar {
    	// Version de CDM-Rail
    	public final static String CDM_VERSION = "V26";
     
    	// Liste des écrans disponibles
    	// On ne tient compte que de deux écrans au maximum
    	static GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
    	static GraphicsDevice[] gDevices = gEnv.getScreenDevices();
    	public final static GraphicsDevice SCREEN_PRIMARY = gDevices[0];
    	public final static GraphicsDevice SCREEN_SECONDARY = gDevices.length > 1 ? gDevices[1] : gDevices[0];
    	// Les deux confighurations graphiques
    	public final static GraphicsConfiguration SCREEN_PRIMARY_CONF = SCREEN_PRIMARY.getDefaultConfiguration();
    	public final static GraphicsConfiguration SCREEN_SECONDARY_CONF = SCREEN_SECONDARY.getDefaultConfiguration();
    	// Pour utiliser le second écran
    	public static boolean useScreenSecondary = false;
    	// Taille de l'écran principal
    	public final static int SCREEN_PRIMARY_WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
    	public final static int SCREEN_PRIMARY_HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
    	// Taille de l'écran secondaire
    	public final static int SCREEN_SECONDARY_WIDTH = Toolkit.getDefaultToolkit().getScreenSize().width;
    	public final static int SCREEN_SECONDARY_HEIGHT = Toolkit.getDefaultToolkit().getScreenSize().height;
     
    	/*
    	 * Les types de fenêtres utilisées
    	 */
    	public final static String WIN_MAIN = "MAIN"; // Fenêtre principale
    }
    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
     
    import javax.swing.*;
     
    // Dans cette classe on trouve la création de toutes les fenêtres
    public class CdmWin implements GlobalVar{
    	// Instances des fenêtres
    	CdmWinMain winMain; // Fenêtre principale de CDM-Rail
     
    	// Constructeur
    	CdmWin (String winType) {
    		/**
                     * @param winType
                     */
    		switch (winType) {
    			case WIN_MAIN :
    				winMain = new CdmWinMain("CDM-Rail - " + CDM_VERSION);
    				break;
    		}
    	}
     
    	/*
    	 * Classe de la fenêtre principale de CDM-Rail
    	 */
     
    	class CdmWinMain extends JFrame{
     
    		// Constructeur
    		CdmWinMain(String ptitle){
    			/**
                             * @param ptitle
                             */
     
    			// Création de la fenêtre sur l'écran principal
    			super(SCREEN_SECONDARY_CONF);
    			// Son titre
    			this.setTitle(ptitle);
    			//  Dimensions de la fenêtre
    			this.setSize(SCREEN_SECONDARY_WIDTH, SCREEN_SECONDARY_HEIGHT);
    			// Positionne la fen^tre au centre de l'écran
    			this.setLocationRelativeTo(null);
    			// Quitte l'application quand on clique sur le bouton de fermeture de la fenêtre
    			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    			this.setVisible(true);
    		}
    	}
     
    }
    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
     
    /*
     * Classe principale
     * 
     */
    public class CdmMain implements GlobalVar {
     
    	/**
             * 
             * @param args
             */
     
    	public static void main(String[] args) {
    		/**
                     * Création de la fenêtre principale de CDM-Rail
                     */
    		CdmWin winMain = new CdmWin(GlobalVar.WIN_MAIN);
         }	
    }
    Je travaille avec Eclipse, le code s'exécute sans erreurs
    Mais la fenêtre s'affiche sur le premier écran
    J'ai affiché le nombre d'écran avec gDevices.length, il affiche bien 2
    Je suis sur MacOS
    Merci pour votre aide
    Louis

  2. #2
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    7 663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 7 663
    Par défaut
    Salut Sonata32.

    Code java : 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
    import java.awt.GraphicsConfiguration;
    import java.awt.GraphicsDevice;
    import java.awt.GraphicsEnvironment;
    import java.awt.Rectangle;
     
    public interface GlobalVar {
     
        // Version de CDM-Rail
        public static final String CDM_VERSION = "V26";
     
        // Environnement graphique
        public static final GraphicsEnvironment G_ENV =
                GraphicsEnvironment.getLocalGraphicsEnvironment();
     
        // Liste des écrans disponibles
        public static final GraphicsDevice[] G_DEVICES =
                G_ENV.getScreenDevices();
     
        // Écran principal
        public static final GraphicsDevice SCREEN_PRIMARY =
                G_DEVICES[0];
     
        // Deuxième écran s'il existe,
        // sinon on utilise l'écran principal
        public static final GraphicsDevice SCREEN_SECONDARY =
                G_DEVICES.length > 1 ? G_DEVICES[1] : G_DEVICES[0];
     
        // Configurations graphiques
        public static final GraphicsConfiguration SCREEN_PRIMARY_CONF =
                SCREEN_PRIMARY.getDefaultConfiguration();
     
        public static final GraphicsConfiguration SCREEN_SECONDARY_CONF =
                SCREEN_SECONDARY.getDefaultConfiguration();
     
        // Indique si l'on souhaite utiliser le deuxième écran
        public static boolean useScreenSecondary = false;
     
        /*
         * Dimensions et position de l'écran principal
         */
        public static final Rectangle SCREEN_PRIMARY_BOUNDS =
                SCREEN_PRIMARY_CONF.getBounds();
     
        /*
         * Dimensions et position du deuxième écran
         */
        public static final Rectangle SCREEN_SECONDARY_BOUNDS =
                SCREEN_SECONDARY_CONF.getBounds();
     
        /*
         * Types de fenêtres utilisées
         */
        public static final String WIN_MAIN = "MAIN";
    }
    Puis :
    Code java : 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
    import java.awt.Rectangle;
    import javax.swing.JFrame;
     
    // Dans cette classe on trouve la création de toutes les fenêtres
    public class CdmWin implements GlobalVar {
     
        // Instance de la fenêtre principale
        CdmWinMain winMain;
     
        // Constructeur
        CdmWin(String winType) {
     
            switch (winType) {
     
                case WIN_MAIN:
                    winMain = new CdmWinMain("CDM-Rail - " + CDM_VERSION);
                    break;
     
                default:
                    break;
            }
        }
     
        /*
         * Classe de la fenêtre principale de CDM-Rail
         */
        class CdmWinMain extends JFrame {
     
            // Constructeur
            CdmWinMain(String ptitle) {
     
                /*
                 * On choisit l'écran sur lequel afficher
                 * la fenêtre.
                 */
                Rectangle screenBounds;
     
                if (useScreenSecondary && G_DEVICES.length > 1) {
                    screenBounds = SCREEN_SECONDARY_BOUNDS;
                } else {
                    screenBounds = SCREEN_PRIMARY_BOUNDS;
                }
     
                // Titre de la fenêtre
                this.setTitle(ptitle);
     
                /*
                 * Position et taille de la fenêtre.
                 *
                 * Les coordonnées x/y sont importantes :
                 * elles permettent de placer la fenêtre
                 * sur le bon moniteur.
                 */
                this.setBounds(
                    screenBounds.x,
                    screenBounds.y,
                    screenBounds.width,
                    screenBounds.height
                );
     
                // Quitte l'application à la fermeture
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
                // Affichage
                this.setVisible(true);
            }
        }
    }
    Et enfin :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class CdmMain implements GlobalVar {
     
        public static void main(String[] args) {
     
            // Pour le test : utiliser le deuxième écran
            GlobalVar.useScreenSecondary = true;
     
            // Création de la fenêtre principale
            CdmWin winMain = new CdmWin(GlobalVar.WIN_MAIN);
        }
    }
    J'espère que cela va répondre à tes attentes.

  3. #3
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 50
    Par défaut
    Hello Artemus24

    Je ne vois pas ce que tu as modifié
    Correction : j'ai vu, je vais tester
    Merci
    Louis

  4. #4
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 50
    Par défaut
    Hello Artemus24
    J'ai testé et l'affichage se fait toujours le le premier écran
    Merci pour l'aide
    Louis

  5. #5
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 50
    Par défaut
    Dans setBounds rien ne précise quel écran est utilisé
    Louis

  6. #6
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 50
    Par défaut
    Au final cela fonctionne
    Il y avait confusion entre les deux écrans
    Merci
    Louis

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/04/2015, 20h51
  2. pourquoi cela ne marche pas
    Par UDSP50 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/02/2014, 17h33
  3. Réponses: 5
    Dernier message: 18/11/2010, 09h50
  4. Runnable, pourquoi cela ne marche pas?
    Par hug0x dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 16/11/2009, 22h23
  5. Pourquoi cela ne marche pas?
    Par shaytan dans le forum Débuter
    Réponses: 3
    Dernier message: 20/09/2008, 22h37

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