2013-07-20 1 views
0

Je travaille sur une calculatrice qui peut fonctionner en tant que JApplet et en tant qu'application. Lorsque je lance mon code en tant qu'application, la barre de menus apparaît. Mais quand je l'exécute comme un JApplet, ce n'est pas le cas.Java - JMenuBar ne s'affiche pas dans JApplet, mais il fonctionne quand il est exécuté en tant qu'application

Est-ce une limitation JApplet? Parce que quand je mets tout le code (nouveau JMenuBar, ajouter des boutons, etc) dans la classe de la calculatrice cela fonctionne. Mais en utilisant ma propre méthode statique MenuBar.create(), qui fait la même chose et retourne un JMenuBar, ça ne marche pas.

Voici le code, peut-être que j'ai oublié quelque chose qui fait que la barre de menu n'apparaisse pas dans l'applet?

Calculator

private void BuildGui() { 
//MenuBar.create() returns an JMenuBar filled with menus/items. 
    menuBar = MenuBar.create(); 
    panel.add(new JButton("test")); 
} 

private void Go() { 
// NOTE: this.isApplet works, it's a boolean i set during init() or main() 
    if (this.isApplet == true) { 
     setJMenuBar(menuBar); 
     setSize(500,600); 
     add(panel); 
    } else { 
     JFrame frame = new JFrame(); 
     frame.setJMenuBar(menuBar); 
     frame.getContentPane().add(BorderLayout.CENTER, panel); 
     frame.setSize(500,600); 
     frame.setVisible(true); 
    } 
} 
+1

Pour une meilleure aide plus tôt, postez un [SSCCE] (http://sscce.org/). –

+0

J'ai trouvé une solution à mon problème, je posterai la réponse quand je peux. (En tant que nouvel utilisateur, je dois attendre 8 heures). –

Répondre

0

J'ai découvert le problème après avoir expérimenté pendant des heures.

Il semble que la déclaration d'une JMenu/JMenuItem statique dans une classe comme

public class MenuBar { 
private static JMenu[] menu = {new JMenu("Edit"), new JMenu("View") }; 

public static JMenuBar create() { 
    JMenuBar menuBar = new JMenuBar(); 
    for (JMenu m : menu) { 
     menuBar.add(m); 
    } 
    return menuBar 
} 

était à l'origine la barre de menus de ne pas apparaître. Après avoir expérimenté un peu, j'ai découvert que lors de l'exécution en tant que JApplet, JApplet exécute deux fois void init()! Après avoir modifié ma méthode init, tout mon autre code a fonctionné.

// I declared an boolean runOnce = false; 
public void init() { 
    if (runOnce) { 
    new Calculator(); 
    } 
runOnce = true 
} 
Questions connexes