Java SWING JMenuBar JMenu元素被压缩,而不是断行。如何纠正这种行为

Java SWING JMenuBar JMenu元素被压缩,而不是断行。如何纠正这种行为,java,swing,layout,jmenu,jmenubar,Java,Swing,Layout,Jmenu,Jmenubar,我正在尝试让JavaSwingJMenuBar元素正常工作。我的应用程序有几个菜单元素。问题在于,当用户将窗口的大小调整为小于菜单元素的大小时。发生的情况是,菜单元素被压缩并最终彼此重叠,而不是使用更多的行。有没有办法让JMenuBarJMenu元素在空间不足时换行 示例代码: frame = new JFrame(); frame.setBounds(100, 100, 722, 300); frame.setDefaultCloseOperat

我正在尝试让JavaSwing
JMenuBar
元素正常工作。我的应用程序有几个菜单元素。问题在于,当用户将窗口的大小调整为小于菜单元素的大小时。发生的情况是,菜单元素被压缩并最终彼此重叠,而不是使用更多的行。有没有办法让
JMenuBar
JMenu
元素在空间不足时换行

示例代码:

        frame = new JFrame();
        frame.setBounds(100, 100, 722, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JMenuBar menuBar = new JMenuBar();
        frame.getContentPane().add(menuBar, BorderLayout.NORTH);

        JMenu mnNewMenu = new JMenu("New menu");
        menuBar.add(mnNewMenu);

        JMenu mnNewMenu_1 = new JMenu("New menu");
        menuBar.add(mnNewMenu_1);

        JMenu menu = new JMenu("New menu");
        menuBar.add(menu);

        JMenu menu_1 = new JMenu("New menu");
        menuBar.add(menu_1);

        JMenu menu_2 = new JMenu("New menu");
        menuBar.add(menu_2);

        JMenu menu_3 = new JMenu("New menu");
        menuBar.add(menu_3);

        JPanel split = new JPanel();
        frame.getContentPane().add(split, BorderLayout.CENTER);
        split.setLayout(new BorderLayout(0, 0));

        JPanel panel = new JPanel();

        JButton btnNewButton = new JButton("New button");

        JButton btnNewButton_1 = new JButton("New button");

        JButton btnNewButton_2 = new JButton("New button");
        split.add(panel, BorderLayout.CENTER);

        JLabel lblTextContentBla = new JLabel("Text content bla bla bla");
        panel.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
        panel.add(btnNewButton);
        panel.add(btnNewButton_1);
        panel.add(btnNewButton_2);
        panel.add(lblTextContentBla);
截图:

  • 第一个屏幕截图是示例初始状态

  • 第二个屏幕截图显示了不希望的压缩效果

  • Lastpicture显示了一个关于其外观的示例


(p.D:StackOverflow是否被破坏?当我发布图片时,它说它发现了未格式化的代码。必须在没有预览的情况下将链接作为代码发布以使其正常工作…)

JMenuBar的默认布局管理器是
DefaultMenuLayout
,它扩展了
BoxLayout
。此布局不支持换行

您可以尝试使用,看看它是否满足您的要求。此布局扩展了
FlowLayout
,并允许组件换行到新行

基本准则是:

JMenuBar menubar = new JMenuBar();
menuBar.setLayout( new WrapLayout(WrapLayout.LEFT, 0, 0) );

您将获得包装支持,但将失去其他BoxLayout功能。如果它不符合您的要求,那么您需要编写自己的自定义
LayoutManager

JMenuBar的默认布局管理器是
DefaultMenuLayout
,它扩展了
BoxLayout
。此布局不支持换行

您可以尝试使用,看看它是否满足您的要求。此布局扩展了
FlowLayout
,并允许组件换行到新行

基本准则是:

JMenuBar menubar = new JMenuBar();
menuBar.setLayout( new WrapLayout(WrapLayout.LEFT, 0, 0) );
您将获得包装支持,但将失去其他BoxLayout功能。如果它不符合您的要求,那么您需要编写自己的自定义
LayoutManager