2016-05-16 69 views
0

我試圖讓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壞當我張貼圖片它說,它發現了未格式化代碼不得不發佈的鏈接,代碼不帶預覽,使其工作??)

回答

4

JMenuBar的默認佈局管理器是DefaultMenuLayout,它擴展BoxLayout。此佈局不支持包裝。

您可以嘗試使用Wrap Layout來查看它是否符合您的要求。此佈局擴展了FlowLayout並允許組件換行到新行。

的基本代碼將是:

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

您會獲得包裹的支持,但會失去其他BoxLayout的功能。如果它不符合您的要求,那麼您將需要編寫自己的定製LayoutManager