java - SWING JMenuBar JMenu 元素被压缩而不是换行。如何修复此行为

标签 java swing layout jmenu jmenubar

我正在尝试让 Java Swing 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);

截图:

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

/image/DvAhU.png

  • 第二个屏幕截图显示了不需要的压缩效果。

/image/qyGw6.png

  • 最后一张图片展示了其外观的示例。

/image/z3Nxy.png

(P.D:StackOverflow 坏了吗?当我发布图片时,它说它发现了未格式化的代码。必须将链接作为代码发布,没有预览才能使其工作..??)

最佳答案

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

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

基本代码是:

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

您将获得环绕支持,但会失去其他 BoxLayout 功能。如果它不能满足您的要求,那么您需要编写自己的自定义 LayoutManager

关于java - SWING JMenuBar JMenu 元素被压缩而不是换行。如何修复此行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37258964/

相关文章:

java - 我如何为我的 jsp/java web 项目实现使用 twitter 登录

java - SpringLayout 可以完成所有工作吗

java - 检查一个字符串数组是否包含另一个字符串数组的所有值 (Java)

java - 使用 spring mvc 在使用 maven 构建的 JSP 中包含 CSS 文件的问题

java - JTable如何选择多行?

java - 我不知道如何实现 math.round() 或任何其他解决方案来在 JTextField 中获取 ##.##

java - 将组件直接添加到 JFrame 中,还是将它们放在 JPanel 中?

html - 如何在 Liferay 中使用固定大小的列进行布局?

css - HTML 表格的 Firefox CSS 问题

java - 从列表中获取随机字符串