Java JMenuBar没有';在卡片布局中切换卡片时不显示

Java JMenuBar没有';在卡片布局中切换卡片时不显示,java,swing,awt,cardlayout,jmenubar,Java,Swing,Awt,Cardlayout,Jmenubar,我正在开发一个Java桌面应用程序,它在CardLayout中使用多个Jpanels作为card,问题是当我在这些卡之间切换时,JmenuBar会完全消失或只是其中的一部分。我有一个大型机,其中包含所有的Jpanel和JmenuBar,其他JPanel有一些文本和JButtons和JLabels以下是我如何实现这一点的: 这是一个框架,用于存放所有大型机.java public class mainFrame extends JFrame { JPanel cards ; m

我正在开发一个Java桌面应用程序,它在
CardLayout
中使用多个
Jpanel
s作为
card
,问题是当我在这些卡之间切换时,
JmenuBar
会完全消失或只是其中的一部分。我有一个
大型机
,其中包含所有的Jpanel和JmenuBar,其他JPanel有一些文本和
JButton
s和
JLabel
s以下是我如何实现这一点的: 这是一个框架,用于存放所有大型机.java

public class mainFrame extends JFrame {

    JPanel cards ;

    menubar menu= new menubar();

    mainPanel card1 = new mainPanel();

    Ajout card2= new Ajout();

    //ViewAjoutEnf card3= new ViewAjoutEnf();


    public mainFrame(){

        setResizable(true);
        setExtendedState(JFrame.MAXIMIZED_BOTH); 
        this.add(menu);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        cards = new JPanel(new CardLayout());

        cards.add(card1, "Card 1");
        cards.add(card2, "Card 2");
//      cards.add(card3, "Card 3");

        getContentPane().add(cards); 

    }
这是JmenuBar类menubar.Java:

public class Ajout extends JPanel{
    JButton but = new JButton("dsdffd");

    public Ajout(){


      this.setLayout(null); 

      this.add(but);
      but.setBounds(70,500,70,70);
      this.setBackground(Color.white);
      this.setVisible(true);

}

}
公共类菜单栏扩展了JMenuBar{

JMenu menuouvrir = new JMenu("ملف");

JMenuItem ajoutbase = new JMenuItem("فتح");

JMenuItem quiter = new JMenuItem("خروج ");

JMenuItem motpass = new JMenuItem("تبديل كلمة السر");

JMenu menuajout = new JMenu("ادخال ");

JMenuItem ajoutprodui = new JMenuItem("ادخال منتوج");

JMenuItem listproduit = new JMenuItem("لائحة المنتوجات");

JMenu menusortie = new JMenu("اخراج");

JMenuItem sortiproduit = new JMenuItem("اخراج منتوج");

JMenu retour = new JMenu("عودة    ");


JMenu menuapropos = new JMenu("?");



public menubar (){
    this.setBounds(0, 0, 1370, 30);
    this.add(Box.createHorizontalGlue());
    this.setFont(new Font("sans-serif", Font.PLAIN, 12));


    menuouvrir.add(ajoutbase);
    menuouvrir.add(motpass);
    menuouvrir.addSeparator();
    menuouvrir.add(quiter);


    menuajout.add(ajoutprodui);
    menuajout.add(listproduit);

    menusortie.add(sortiproduit);

    this.add(menuapropos);
    this.add(retour);
    this.add(menusortie);
    this.add(menuajout);
    this.add(menuouvrir);

    this.setVisible(true);
}
以下是我的两个JPanel: mainPanel.Java

public class mainFrame extends JFrame {

    JPanel cards ;

    menubar menu= new menubar();

    mainPanel card1 = new mainPanel();

    Ajout card2= new Ajout();

    //ViewAjoutEnf card3= new ViewAjoutEnf();


    public mainFrame(){

        setResizable(true);
        setExtendedState(JFrame.MAXIMIZED_BOTH); 
        this.add(menu);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        cards = new JPanel(new CardLayout());

        cards.add(card1, "Card 1");
        cards.add(card2, "Card 2");
//      cards.add(card3, "Card 3");

        getContentPane().add(cards); 

    }
公共类主面板扩展了JPanel{

   JButton but = new JButton("dsdffd");

    public mainPanel(){

            this.setLayout(null);
            this.add(but);
            but.setBounds(70,500,70,70);
            this.setBackground(Color.white);
            this.setVisible(true);

    }       
}

Ajou.Java

public class Ajout extends JPanel{
    JButton but = new JButton("dsdffd");

    public Ajout(){


      this.setLayout(null); 

      this.add(but);
      but.setBounds(70,500,70,70);
      this.setBackground(Color.white);
      this.setVisible(true);

}

}

不要扩展JMenuBar。没有理由这样做。您可以创建JMenuBar的实例,然后将JMenu实例添加到菜单栏

不要使用空布局。JMenuBar有自己的布局管理器

我看不到使用
setJMenBar(…)
方法将菜单栏添加到框架的位置

阅读Swing教程中关于如何使用菜单的部分,了解更多信息和工作示例。这些示例还将向您展示如何更好地构造代码


另外,不要为了向面板添加单个组件而继续扩展面板。可以向任何面板添加多个组件。并确保面板使用布局管理器。

不要扩展JMenuBar。没有理由这样做。您可以创建JMenuBar的实例,然后将JMenu实例添加到菜单栏

不要使用空布局。JMenuBar有自己的布局管理器

我看不到使用
setJMenBar(…)
方法将菜单栏添加到框架的位置

阅读Swing教程中关于如何使用菜单的部分,了解更多信息和工作示例。这些示例还将向您展示如何更好地构造代码

此外,不要为了向面板添加单个组件而不断扩展面板。您可以向任何面板添加多个组件。并确保您的面板使用布局管理器