我试图让Java Swing JMenuBar
元素正常工作。我的应用程序有几个菜单元素。问题是当用户将窗口大小调整为小于菜单元素大小时。会发生什么是菜单元素被压缩并最终相互重叠而不是使用更多的行。当没有足够的空间时,有没有办法让JMenuBar
JMenu
元素断行?
ExampleCode:
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);
截图:
(P.D:StackOverflow是否已损坏?当我发布图片时,它说它找到了未格式化的代码。必须将链接发布为没有预览的代码才能使其工作.. ??)
答案 0 :(得分:4)
JMenuBar的默认布局管理器是扩展DefaultMenuLayout
的{{1}}。此布局不支持包装。
您可以尝试使用Wrap Layout查看它是否符合您的要求。此布局扩展BoxLayout
并允许组件换行到新行。
基本代码是:
FlowLayout
您将获得包装支持,但会丢失其他BoxLayout功能。如果它不符合您的要求,那么您需要编写自己的自定义JMenuBar menubar = new JMenuBar();
menuBar.setLayout( new WrapLayout(WrapLayout.LEFT, 0, 0) );
。