Показать JMenu в JPanel без фрейма.setJMenuBar

Я хотел бы добавить JMenuBar в Jpanel. Я старался:

 p.add(menubar, BorderLayout.NORTH);

Кроме того: я не хочу использовать метод JSetMenu на JFrame, потому что в настоящее время я делаю плагин Astah, и я хотел бы, чтобы Jpanel (где находится Jmenubar) был в Асте.

Как мне установить JMenuBar на Jpanel, чтобы он шел сверху? Я хотел бы поместить весь контент в Jpanel и поместить это в 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() {

}
}

1 ответ

Я сделал очень простой тест, и он отлично работает у меня. Исходя из того, что я могу вывести из вашего кода, вы используете...

mainJPanel.add(AuguSoftModellerobjectsNew.createMenuBar());

который бы поместил JMenuBar в CENTRE (или по умолчанию) положение панели, которая будет скрыта другими компонентами, которые вы также добавите туда

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);
        }

}
Другие вопросы по тегам