2017-10-06 5 views
0

Je voudrais ajouter un JMenuBar à un Jpanel. J'ai essayé:Afficher JMenu dans JPanel sans frame.setJMenuBar

p.add(menubar, BorderLayout.NORTH); 

aussi: Je ne veux pas faire utilisez la méthode JSetMenu sur le JFrame parce que je fais actuellement un Astah-plugin et je voudrais que le JPanel (où le JMenuBar est) pour être à Astah.

Comment puis-je définir un JMenuBar à un Jpanel afin qu'il passe en haut? Je voudrais mettre tout le contenu dans le Jpanel et le mettre dans Astah.

Le code pour le mettre en Astah:

import com.change_vision.jude.api.inf.project.ProjectAccessor; 
import com.change_vision.jude.api.inf.project.ProjectAccessorFactory; 
import com.change_vision.jude.api.inf.project.ProjectEvent; 
import com.change_vision.jude.api.inf.project.ProjectEventListener; 
import com.change_vision.jude.api.inf.ui.IPluginExtraTabView; 
import com.change_vision.jude.api.inf.ui.ISelectionListener; 

import javax.swing.*; 
import java.awt.*; 

public class showobjects extends JPanel implements IPluginExtraTabView, ProjectEventListener { 
public showobjects() { 
    initComponents(); 
} 

private void initComponents() { 
    setLayout(new BorderLayout()); 
    add(createLabelPane()); 
    addProjectEventListener(); 
} 

private void addProjectEventListener() { 
    try { 
     ProjectAccessor projectAccessor = ProjectAccessorFactory.getProjectAccessor(); 
     projectAccessor.addProjectEventListener(this); 
    } catch (ClassNotFoundException e) { 
     e.getMessage(); 
    } 
} 

private Container createLabelPane() { 
    JLabel label = new JLabel("showobjects "); 
    JScrollPane pane = new JScrollPane(label); 

    showobjects app = new showobjects(); 
    JPanel mainJpanel = app.createJPanel(); 


    return mainJpanel; 
} 

@Override 
public void projectChanged(ProjectEvent e) { 
} 

@Override 
public void projectClosed(ProjectEvent e) { 
} 

@Override 
public void projectOpened(ProjectEvent e) { 
} 

@Override 
public void addSelectionListener(ISelectionListener listener) { 
} 

@Override 
public Component getComponent() { 
    return this; 
} 

@Override 
public String getDescription() { 
    return "Show showobjects here"; 
} 

@Override 
public String getTitle() { 
    return "showobjects "; 
} 

public void activated() { 

} 

public void deactivated() { 

} 
} 
+0

Je l'ai fait un test très simplement à l'aide d'un '' JPanel' et BorderLayout' et il fonctionne très bien pour moi – MadProgrammer

Répondre

1

J'ai fait un test très simple et cela fonctionne très bien moi. Sur la base de ce que je peux déduire de votre code, vous utilisez ...

mainJPanel.add(AuguSoftModellerobjectsNew.createMenuBar()); 

qui placerait la JMenuBar dans la position CENTRE (ou par défaut) du panneau, qui sera caché par d'autres composants que vous aussi ajouter là

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class Test { 

    public static void main(String[] args) { 
     new Test(); 
    } 

    public Test() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

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

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(mb, BorderLayout.NORTH); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 

} 
+0

comment puis-je mettre la barre de menu sur l'op et mettre les autres choses dans le centre? Est-ce qu'un borderlayout est bon pour faire ça? Votre aide serait très appréciée. Je ne sais pas comment mettre manuellement une barre de menu au JPanel et aussi pouvoir montrer d'autres composants. Parce que pour l'instant tout est visible au centre. @MadProgrammer – Hye

+0

Pour placer les composants dans la position "centre", vous avez probablement besoin d'un composant qui agit comme le volet de contenu principal pour ces composants, de la même manière que ce que j'ai montré ci-dessus. Si vous ajoutez des composants à 'TestPane', ils seront contenus dedans, mais le' TestPane' lui-même occupera la position centrale – MadProgrammer

+0

J'ai essayé mais ça ne marche pas, j'ai fait un JPanel principal et deux autres panneaux (un pour le jmenubar) et un autre pour un autre contenu. J'ai ajouté les deux jpanels au Jpanel principal et mis le jmenubar, borderlayout au nord. Qu'ai-je fait de mal? @MadProgrammer – Hye