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

JavaFX Discussion :

Aspect d'un menu suivant son état


Sujet :

JavaFX

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    83
    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 : 83
    Par défaut Aspect d'un menu suivant son état
    Hello

    Nouveau problème
    J'ai créé une barre de menus avec des menus ayant setDisable(true) et setDisable(false)
    Problème : ils s'affichent tous identiquement et réagissent à la souris pareils
    Je pensais qu'avec setDisable(true) le menu serait grisé et sans réaction au passage de la souris
    Je suis sur Mac, est-ce encore lui qui fait des siennes ?
    Louis

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 940
    Billets dans le blog
    54
    Par défaut
    Hum, perso tout fonctionne OK, et ce quelque soit le système (avec les versions de Java et JavaFX mentionnées dans l'autre topic)

    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
    package test.menubar;
     
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Menu;
    import javafx.scene.control.MenuBar;
    import javafx.scene.layout.BorderPane;
    import javafx.stage.Stage;
     
    public class Main extends Application {
     
        @Override
        public void start(Stage stage) throws Exception {
            final var fileMenu = new Menu("File");
            final var editMenu = new Menu("Edit");
            final var aboutMenu = new Menu("About");
            editMenu.setDisable(true);
            final var menuBar = new MenuBar();
            menuBar.getMenus().addAll(fileMenu, editMenu, aboutMenu);
            final var root = new BorderPane();
            root.setTop(menuBar);
            final var scene = new Scene(root);
            stage.setTitle("Test");
            stage.setWidth(800);
            stage.setHeight(600);
            stage.setScene(scene);
            stage.show();
        }
    }
    Nom : dvp-win01.jpg
Affichages : 20
Taille : 19,4 Ko Nom : dvp-lin01.jpg
Affichages : 21
Taille : 24,2 Ko Nom : dvp-mac01.jpg
Affichages : 21
Taille : 13,6 Ko
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    83
    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 : 83
    Par défaut
    Hello
    D'abord merci pour ton test
    A priori le problème vient du fait que je déclare mes menus (Menu) de la barre des menus avec la classe MenuItem ce qui ne pose aucun problème vu que la classe Menu hérite de MenuItem
    Je fais cela car je crée une classe CdmMenu qui peut contenir soit un Menu soit un MenuItem
    Pourquoi cela ne fonctionne pas avec MenuItem pour les Menu déclarés comme tel ?
    Merci pour ton aide
    Louis

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    83
    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 : 83
    Par défaut
    Au final cela ne fonctionne pas
    Louis

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    83
    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 : 83
    Par défaut
    Hello

    J'ai testé ton exemple et cela fonctionne
    Je n'arrive pas à voir ce qui cloche dans mon code

    Claase CdmMain
    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
    package fr.free.cdmrail;
     
    import java.time.LocalDate;
     
    import javafx.application.Application;
    import javafx.scene.Cursor;
    import javafx.scene.Scene;
    import javafx.scene.layout.BorderPane;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Screen;
    import javafx.stage.Stage;
     
     
    public class CdmMain extends Application {
     
    	public static void main(String[] args) {
     
    		// C'est ici que tout démarre
    		// C'est le seul code qui doit être présent ici
    		Application.launch(args);
    	}
     
    	@Override
    	// Surcharge de la méthode start()
    	// Point d'entrée de l'application
    	// cdmMain est créée par défaut par JavaFX
    	public void start(Stage cdmMain) {
     
    		// Noeud racine (Root Node) de la Scene, 
    		// départ pour tous les composants de la fenêtre principale
    		CdmMainRoot cdmMainRoot = new CdmMainRoot();
     
    		// Crée une Scene avec cdmrailMainRoot comme Root Node
    		// Containeur des composants affichés dans la fenêtre
    		Scene cdmMainScene = new Scene(cdmMainRoot);
     
    		// Titre de la fenêtre principale
    		cdmMain.setTitle(CdmGlobal.getCdmTitle());
     
    		// La Scene associée
    		cdmMain.setScene(cdmMainScene);
     
    		// Pour redimensionner la fenêtre
    		cdmMain.setResizable(true);
     
    		// Impose une taille minimum
    		cdmMain.setMinWidth(400);
    		cdmMain.setMinHeight(300);
     
    		// Démarre en taille maxi
    		cdmMain.setMaximized(true);
     
    		// Affiche la fenêtre et son contenu
    		cdmMain.show();
    	}
    }
    Classe CdmGlobal
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    package fr.free.cdmrail;
     
    import java.time.LocalDate;
     
    import javafx.stage.Screen;
     
    public class CdmGlobal {
    	/*
    	 * ---------- Champs ----------
    	 */
    	// Date en cours
    	private static LocalDate localDate = LocalDate.now();
     
    	// Version de CDM
    	private static String CDM_VERSION = " V27";
     
    	// Titre de la fenêtre principale
    	private static String cdmMainTitle = "CDM RAIL (c) Copyright " + localDate.getYear() + CDM_VERSION + " - " + CdmFile.getLayoutFileName();
     
    	// Gestion des moniteurs
    	// Moniteur principal
    	private static Screen primaryScreen = Screen.getPrimary();
    	// Moniteur secondaire si il existe, sinon null
    	private static Screen secondaryScreen = Screen.getScreens().size() > 1 
    			? Screen.getScreens().get(1) : null;
     
    //	cdmRailMain.setX(CdmrailGlobal.getSecondaryScreen().getBounds().getMinX());
    //	cdmRailMain.setY(CdmrailGlobal.getSecondaryScreen().getBounds().getMinY());
     
     
    	// Gestion de la langue, Français par défaut
    	public enum Language {
    		FRENCH,
    		ENGLISH;
    	}
     
    	private static Language language = Language.FRENCH;
     
    	//	private static IntegerProperty language = new SimpleIntegerProperty(LANGUAGE_FRENCH);
     
    	// Gestion de l'échelle, HO par défaut
    	public enum Scale {
    		SCALE_Z,
    		SCALE_N,
    		SCALE_TT,
    		SCALE_HO,
    		SCALE_O,
    		SCALE_I,
    		SCALE_II,
    		SCALE_HOE,
    		SCALE_IIM;
    	}
    	private static Scale scale = Scale.SCALE_HO;
     
    	/*
    	 * ---------- Accesseurs ----------
    	 */
    	// Retourne le titre de la fenêtre principale
    	public static String getCdmTitle() {
    		return cdmMainTitle;
    	}
     
    	// Ecran principal
    	public static Screen getPrimaryScreen() {
    		return primaryScreen;
    	}
     
    	// Ecran secondaire
    	public static Screen getSecondaryScreen() {
    		return secondaryScreen;
    	}
     
    	/*
    	 * ---------- Mutateurs ----------
    	 */
    	// Positionne la langue
    	public static void setLanguage(Language theLanguage) {
    		language = theLanguage;
    	}
     
    	// Positionne l'échelle
    	public static void setScale(Scale theScale) {
    		scale = theScale;
    	}
     
    	/*
    	 * ---------- Méthodes ----------
    	 */
    	// Retourne true si la langue est en français
    	public static boolean isFrenchLanguage() {
    		return language == Language.FRENCH;
    	}
     
    	// Retourne true si l'échelle est Z
    	public static boolean isScaleZ() {
    		return scale == Scale.SCALE_Z;
    	}
     
    	// Retourne true si l'échelle est N
    	public static boolean isScaleN() {
    		return scale == Scale.SCALE_N;
    	}
     
    	// Retourne true si l'échelle est TT
    	public static boolean isScaleTT() {
    		return scale == Scale.SCALE_TT;
    	}
     
    	// Retourne true si l'échelle est HO
    	public static boolean isScaleHO() {
    		return scale == Scale.SCALE_HO;
    	}
     
    	// Retourne true si l'échelle est O
    	public static boolean isScaleO() {
    		return scale == Scale.SCALE_O;
    	}
     
    	// Retourne true si l'échelle est I
    	public static boolean isScaleI() {
    		return scale == Scale.SCALE_I;
    	}
     
    	// Retourne true si l'échelle est II
    	public static boolean isScaleII() {
    		return scale == Scale.SCALE_II;
    	}
     
    	// Retourne true si l'échelle est HOe
    	public static boolean isScaleHOe() {
    		return scale == Scale.SCALE_HOE;
    	}
     
    	// Retourne true si l'échelle est IIm
    	public static boolean isScaleIIm() {
    		return scale == Scale.SCALE_IIM;
    	}
    }
    Classe CdmMainRoot
    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
    package fr.free.cdmrail;
     
    import javafx.scene.layout.BorderPane;
     
    // Container racine de l'application
    public class CdmMainRoot extends BorderPane {
     
    	/*
    	 * Constructeur
    	 */
    	CdmMainRoot() {
    		// Positionne la barre de menus
    		CdmMenuModel.setMenuBar();
    		this.setTop(CdmMenuModel.getMenuBar());
    	}
     
    }
    Classe CdmOS
    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
    package fr.free.cdmrail;
     
    public class CdmOS {
     
    	// Récupère le nom de l'OS système
    	private static String computerOS = System.getProperty("os.name").toUpperCase();
     
    	// Retourne true si on est sur Linux
       public static boolean isLinux() {
          return computerOS.indexOf("NUX") >= 0;
       }
     
       // Retourne true si on est sur Windows
       public static boolean isWindows() {
          return computerOS.indexOf("WIN") >= 0;
       }
     
       // Retourne true si on est sur Mac OS
       public static boolean isMacOS() {
          return computerOS.indexOf("MAC") >= 0;
       }
    }
    ClasseCdmMenuModel
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    package fr.free.cdmrail;
     
    import javafx.scene.control.Menu;
    import javafx.scene.control.MenuBar;
    import javafx.scene.control.MenuItem;
     
    public class CdmMenuModel {
     
    	// Offset entre les ID des menus successifs
    	public static final short MENU_OFFSET_ID = 1;
     
    	/*
    	 * ++++++++++++++++++++ Début de la définition des menus ++++++++++++++++++++
    	 */
     
    	/*
    	 * ---------- La barre de menus ----------
    	 */
     
    	// Barre des menus
    	private static MenuBar menuBar = new MenuBar();
     
    	// ID du premier menu de la barre des menus
    	public static final short MENU_FIRST = MENU_OFFSET_ID;
    	// ID des menus de la barre des menus
    	public static final short MENU_FILE = MENU_FIRST;
    	public static final short MENU_EDIT = MENU_FILE + MENU_OFFSET_ID;
    	public static final short MENU_VIEW = MENU_EDIT + MENU_OFFSET_ID;
    	public static final short MENU_CONSISTS = MENU_VIEW + MENU_OFFSET_ID;
    	public static final short MENU_CONFIGURATION = MENU_CONSISTS + MENU_OFFSET_ID;
    	public static final short MENU_ROUTES = MENU_CONFIGURATION + MENU_OFFSET_ID;
    	public static final short MENU_RUN = MENU_ROUTES + MENU_OFFSET_ID;
    	public static final short MENU_INTERFACE = MENU_RUN + MENU_OFFSET_ID;
    	public static final short MENU_OPTIONS = MENU_INTERFACE + MENU_OFFSET_ID;
    	public static final short MENU_TOOLS = MENU_OPTIONS + MENU_OFFSET_ID;
    	public static final short MENU_COMMIP = MENU_TOOLS + MENU_OFFSET_ID;
    	public static final short MENU_WINDOW = MENU_COMMIP + MENU_OFFSET_ID;
    	public static final short MENU_HELP = MENU_WINDOW + MENU_OFFSET_ID;
    	public static final short MENU_OTHERS = MENU_HELP + MENU_OFFSET_ID;
     
    	// ID du dernier menu de la barre des menus
    	public static final short MENU_LAST = MENU_OTHERS;
     
    	// Liste des ID des menus de MENU_MAIN
    	public static final short[] MENU_MAIN_LIST = {
    		MENU_FILE,
    		MENU_EDIT,
    		MENU_VIEW,
    		MENU_CONSISTS,
    		MENU_CONFIGURATION,
    		MENU_ROUTES,
    		MENU_RUN,
    		MENU_INTERFACE,
    		MENU_OPTIONS,
    		MENU_TOOLS,
    		MENU_COMMIP,
    		MENU_WINDOW,
    		MENU_HELP,
    		MENU_OTHERS
    	};
     
    	// Noms des menus de la barre des menus
    	// En Français, en Anglais
    	public static final String[] MENU_MAIN_NAME = {
    		"Fichier/Réseau","File/Layout",
    		"Edition/Réseau","Edit/Layout",
    		"Affichage","View",
    		"Trains","Consists",
    		"Configuration","Configuration",
    		"Itinéraires","Routes",
    		"Exécuter","Run",
    		"Interface","Interface",
    		"Options","Options",
    		"Outils","Tools",
    		"Comm./IP","Comm./IP",
    		"Fenêtre","Window",
    		"Aide","Help",
    		"...","..."
    	};
     
    	// Etats des menus de la barre des menus
    	// true pour un menu actif, sinon false
    	// Les valeurs indiquées sont celles au démarrage de l'pplication
    	public static final boolean[] MENU_MAIN_STATE = {
    		true,
    		false,
    		false,
    		false,
    		false,
    		false,
    		false,
    		true,
    		true,
    		false,
    		true,
    		true,
    		true,
    		true
    	};
     
    	/*
    	 * ++++++++++++++++++++ Fin de la définition des menus ++++++++++++++++++++
    	 */
     
    	/*
    	 * ++++++++++++++++++++ Création des menus ++++++++++++++++++++
    	 */	
     
    	// 
    	private static class CdmMenu {
     
    		/*
    		 * Champs d'un menu
    		 */
    		private short menuID;
    //		private String menuName;
    		private boolean menuState;
    		private Menu menu;
     
    		/*
    		 * Accesseurs
    		 */
     
    		// Retourne l'ID du menu
    		public final short getMenuID() {
    			return this.menuID;
    		}
     
    		// Retourne le nom du menu
    		public final String getMenuName() {
    			return this.menu.getText();
    		}
     
    		// Retourne l'état du menu
    		public final boolean getMenuState() {
    			return this.menuState;
    		}
     
    		// Retourne le menu
    		public final MenuItem getMenu() {
    			return this.menu;
    		}
     
    		/*
    		 * Mutateurs
    		 */
     
    		// Renseigne l'ID du menu
    		public void setMenuID(short ID) {
    			this.menuID = ID;
    		}
     
    		// Renseigne l'état du menu
    		public void setMenuState(boolean state) {
    			this.menuState = state;
    			this.menu.setDisable(!state);
    		}
     
    		// Renseigne le menu
    		public void SetMenu(Menu menu) {
    			this.menu = menu;
    		}
    	}
     
    	/*
    	 * Méthodes
    	 */
     
    	// Renseigne la barre des menus
    	public static void setMenuBar() {
    		for (short menuIdx = 0; menuIdx < MENU_MAIN_LIST.length; menuIdx++) {
    			// Création du cdmMenu instance de CdmMenu
    			CdmMenu cdmMenu = new CdmMenu();
    			// ID du cdmMenu
    			cdmMenu.setMenuID(MENU_MAIN_LIST[menuIdx]);
    			// Le menu, libellé suivant la langue
    			Menu theMenu = new Menu(MENU_MAIN_NAME[CdmGlobal.isFrenchLanguage() ? 2*menuIdx : 2*menuIdx+1]);
    			cdmMenu.SetMenu(theMenu);
    			// Etat du menu
    			cdmMenu.setMenuState(MENU_MAIN_STATE[menuIdx]);
    			// Ajout du menu à la barre de menu
    			menuBar.getMenus().add(theMenu);
    			// Utiliser la barre de menus système sur un Mac
    			if (CdmOS.isMacOS()) {
    				menuBar.setUseSystemMenuBar(true);
    			}
    		}
    	}
     
    	// Retourne la barre des menus
    	public static MenuBar getMenuBar() {
    		return menuBar;
    	}
    }
    Si quelqu'un voit ce qui cloche
    Merci Pour l'aide

    Louis

Discussions similaires

  1. gestion d'un utilisateur suivant son role
    Par aileen dans le forum Langage
    Réponses: 2
    Dernier message: 14/04/2008, 13h43
  2. Changer l'aspect d'un menu
    Par tianet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/05/2007, 02h20
  3. menu suivant l'ascenseur
    Par killerhertz dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/04/2007, 10h08
  4. Réponses: 8
    Dernier message: 29/06/2006, 15h54
  5. Lire fichier suivant son extension !!
    Par Shandler dans le forum Langage
    Réponses: 37
    Dernier message: 18/11/2005, 15h44

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