SWING JMenuBar JMenu元素被压缩而不是断行。如何解决此问题

问题描述:

我试图让Java Swing JMenuBar元素正常工作。我的应用程序有几个菜单元素。问题出在用户调整窗口大小小于菜单元素大小的时候。会发生什么是菜单元素被压缩和最终互相重叠,而不是使用更多的行。当没有足够的空间时,有没有办法让JMenuBarJMenu元素断行?SWING 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); 

屏幕截图:

  • 首先截图的示例初始状态。

http://i.stack.imgur.com/DvAhU.png

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

http://i.stack.imgur.com/qyGw6.png

  • Lastpicture显示了它应该如何看一个例子。

​​

(PD:?是的StackOverflow坏当我张贴图片它说,它发现了未格式化代码不得不发布的链接,代码不带预览,使其工作??)

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

您可以尝试使用Wrap Layout来查看它是否符合您的要求。此布局扩展了FlowLayout并允许组件换行到新行。

的基本代码将是:

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

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