2016-05-16 5 views
0

Я пытаюсь заставить элемент Java Swing JMenuBar работать правильно. Мое приложение имеет несколько элементов меню. Проблема заключается в том, что пользователь уменьшает размер окна до размера элементов меню. Случается, что элементы меню становятся сжатыми, а endup перекрывают друг друга, а не используют больше строк. Есть ли способ иметь элементы 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 показывает пример того, как это должно выглядеть.

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

(PD:. Является ли StackOverflow сломаны Когда я отправляю фотографии он говорит, что он нашел отформатированный код Если бы размещать ссылки как код, без предварительного просмотра, чтобы заставить его работать .. ??)

ответ

4

Менеджером по умолчанию для JMenuBar является DefaultMenuLayout, который расширяет BoxLayout. Этот макет не поддерживает упаковку.

Вы можете использовать Wrap Layout, чтобы узнать, соответствует ли оно вашим требованиям. Этот макет расширяет FlowLayout и позволяет компонентам обертывать новую строку.

Основной код будет:

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

Вы бы получить оберточную поддержку, но потеряете другие функции BoxLayout. Если это не соответствует вашим требованиям, тогда вам нужно будет написать свой собственный код LayoutManager.

 Смежные вопросы

  • Нет связанных вопросов^_^