Je travaille actuellement avec du code java sur une barre de menu et j'ai du mal à accéder à un élément de menu depuis un JMenuBar. La barre de menu a un élément JMenu, et le JMenu a un JMenuItem, j'essaie d'accéder à JMenuItem, en différenciant les éléments par l'attribut name (c'est juste une façon de les différencier, si quelqu'un sait mieux façon de le faire s'il vous plaît faites le moi savoir.) Je le fais sur l'événement on-change dans les onglets de commutation dans mon application, alors voici mon code.Accéder à JMenuItems à partir de JMenuBarbar en Java?
public void stateChanged(ChangeEvent e) {
if(tabbedPane.getSelectedIndex() != 0){
for(int i = 0; i < menuItems.length; i++){
MenuElement[] subItems = menuItems[i].getSubElements();
for(int j = 0; j < subItems.length; j++){
System.out.println(subItems[j].getComponent().getName());
}
}
}
}
Les menuItems provient d'un getSubElements() appelle la JMenuBar, je peux obtenir l'élément « Fichier », mais quand je fais la deuxième boucle pour trouver l'élément sous « Fichier » la plupart des attributs dont le nom sont null, même si j'ai déjà défini le nom.
Dans le débogueur, je peux voir le nom que j'ai défini lors de la surveillance de subItems [j] .getComponent(), dans une section intitulée 'component', puis sous 'element data [0]'.
Je suis sûr qu'il y a un moyen d'accéder à cet attribut, mais je n'ai pas été capable de comprendre comment. Est-ce que quelqu'un sait comment accéder à ceci ou savoir un meilleur moyen de distinguer entre MenuItems d'un JMenuBar?
Merci.
EDIT - Je l'ai compris. Si quelqu'un est curieux, JMenuItem a été imbriqué dans une autre couche dans le JMenu. Ce code imprime le nom que j'essayais de trouver.
public void stateChanged(ChangeEvent e) {
if(tabbedPane.getSelectedIndex() != 0){
for(int i = 0; i < menuItems.length; i++){
MenuElement[] subItems = menuItems[i].getSubElements();
for(int j = 0; j < subItems.length; j++){
MenuElement[] subSubItems = subItems[j].getSubElements();
for(int k = 0; k < subSubItems.length; k++){
System.out.println(subSubItems[k].getComponent().getName());
}
}
}
}
}
Cela étant dit, je ne sais pas pourquoi cela est. Quelqu'un sait-il? Voici le code qui construit le JMenuBar:
public void buildMenu(){
menuBar = frame.getJMenuBar();
menu = new JMenu("File");
menu.setName("file");
menuBar.add(menu);
importTiles = buildImportTilesMenuItem();
menu.add(importTiles);
}
public JMenuItem buildImportTilesMenuItem(){
importTiles = new JMenuItem("Import Tiles");
importTiles.setName("importTiles");
importTiles.addActionListener(this);
return importTiles;
}