2016-05-16 8 views
0

Ich versuche, das Java Swing JMenuBar Element richtig zu funktionieren. Meine App hat mehrere Menüelemente. Das Problem liegt vor, wenn der Benutzer die Größe des Fensters kleiner als die Größe der Menüelemente ändert. Was passiert, ist, dass die Menüelemente komprimiert werden und sich gegenseitig überlappen, anstatt mehr Zeilen zu verwenden. Gibt es eine Möglichkeit, die JMenuBarJMenu Elemente zu brechen, wenn nicht genügend Platz vorhanden ist?SWING JMenuBar JMenu-Elemente werden komprimiert, anstatt die Linie zu unterbrechen. Wie man dieses Verhalten behebt

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); 

Screenshots:

  • Erster Screenshot ist das Beispiel Anfangszustand.

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

  • zweiter Screenshot zeigt den unerwünschten Kompressionseffekt.

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

  • Lastpicture zeigt ein Beispiel dafür, wie es aussehen sollte.

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

(PD:. Ist Stackoverflow gebrochen Wenn ich Bilder posten, sagt es, dass es unformatiert Code gefunden hat die Links als Code ohne Previews zu veröffentlichen, damit es funktioniert .. ??)

Antwort

4

Der Standard-Layout-Manager für eine JMenuBar ist die DefaultMenuLayout, die die BoxLayout erweitert. Dieses Layout unterstützt kein Wrapping.

Sie können versuchen, die Wrap Layout zu verwenden, um zu sehen, ob es Ihren Anforderungen entspricht. Dieses Layout erweitert FlowLayout und ermöglicht es Komponenten, in eine neue Zeile zu wechseln.

würde der Grund Code sein:

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

Sie gewinnen Unterstützung Einwickeln, würde aber auch andere BoxLayout Funktionen verlieren. Wenn es Ihren Anforderungen nicht entspricht, müssen Sie Ihre eigene benutzerdefinierte LayoutManager schreiben.

Verwandte Themen