2012-09-06 1 views
0

Je suis confronté à un problème avec mon emplacement JMenuBar dans mon application Java. Je suis en train d'utiliser le code ComponentResizer.java de article.Est-il possible de déplacer JMenuBar sans l'ajouter dans un JPanel

et tout ce qui est redimensionné fonctionne correctement, sauf dans la zone nord de mon application (JFrame non décorée) et ses coins (de North Area) car le JMenuBar m'empêche de redimensionner cette zone.

Existe-t-il une solution ou peut-être un hack pour déplacer un peu le JMenuBar ou activer le redimensionnement dans la zone nord?

J'utilise également la méthode setJMenuBar() pour ajouter le JMenuBar à la zone nord de mon application.

code:

public class MyApp extends JFrame { 

private MyApp frame; 
private JMenuBar menuBar; 

public static void main(String[] args) { 
    frame = new MyApp(); 
    frame.setUndecorated(true); 
    frame.setVisible(true); 
} 
public MyApp(){ 
    initComponents(); 
} 
private void initComponents(){ 
    setTitle("MediaForm"); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(100, 100, 673, 482); 
    menuBar = new JMenuBar(); 
    setJMenuBar(menuBar); 
} 
} 
+0

S'il vous plaît modifier votre question d'inclure un [sscce] (http://sscce.org/) qui présente le problème que vous décrivez. Pas besoin de répéter 'ComponentResizer'. – trashgod

Répondre

1

Je n'ai pas testé, mais JRootPane est un JComponet, il peut être possible d'ajouter un EmptyBorder à elle, ce qui permet la JMenuBar à compenser.

A défaut, vous aurez probablement besoin de mettre en œuvre votre propre JRootPane pour gérer la mise en page du JMenuBar & volet contenu

UPDATE avec test

public class TestMenuFrame extends JFrame { 

    public TestMenuFrame() throws HeadlessException { 

     setTitle("Test"); 

     getRootPane().setBorder(new EmptyBorder(10, 10, 10, 10)); 

     JMenuBar mb = new JMenuBar(); 
     mb.add(new JMenu("Test")); 

     setJMenuBar(mb); 

     setSize(100, 100); 

     getContentPane().setBackground(Color.RED); 

     setLocationRelativeTo(null); 

    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 

     new TestMenuFrame().setVisible(true); 

    } 
} 

Sample

+0

Je ne pense pas que ce soit mon problème.Je n'ai tout simplement pas accès aux auditeurs JFrame dans la zone nord de mon application – PeGiannOS

+0

Et j'utilise un cadre non décoré.Merci pour la réponse rapide – PeGiannOS

+0

Tout d'abord, si vous pouvez ajouter des composants à tout partie du cadre, vous avez seulement besoin de marcher la hiérarchie des composants jusqu'à ce que vous atteigniez le JRootPane, en dehors de laquelle, vous avez déclaré que vous avez utilisé setJMenu, ce qui signifie que vous devez avoir accès à l'image. Secondaire, je ne pense pas utiliser un cadre non décoré fera la différence à la solution que j'ai suggéré – MadProgrammer

1

JMenuBar étend JComponent, donc vous pouvez le mettre n'importe où vous mettriez un composant ordinaire. Notez qu'il peut être déroutant pour les utilisateurs si vous le placez dans des emplacements inattendus.

Voir aussi ceci: add JMenuBar to a JPanel?

+0

Comment pourrais-je supprimer le JMenuBar du JFrame pour ajouter un nouveau Jpanel et ensuite ajouter le JMenuBar dessus sans perdre son contenu – PeGiannOS

+0

Je l'ai fait moi-même.Merci pour l'aide.Il m'a vraiment aidé. – PeGiannOS