2010-11-22 6 views
6

Ich habe drei JPanels auf einem JFrame gemalt. Diese sind derzeit so eingestellt, dass sie das Standard-FlowLayout verwenden. Ich möchte, dass diese in einer einzigen Spalte übereinander stehen.Java Swing: FlowLayout JPanels sitzen nebeneinander?

Allerdings finde ich, dass diese nebeneinander auf der gleichen Linie schwimmen, solange die Komponenten in ihnen.

Ist die natürliche Breite eines FlowLayout JPanel die Summe seines Inhalts? Wenn ja, gibt es eine Möglichkeit, die Breite des Bereichs auf die Breite des JFrame zu beschränken?

Interessanterweise finde ich, dass, wenn die "top" und "bottom" Panels Inhalt haben, die die gesamte Breite des JFrame umfasst, und das "mittlere" Panel leer bleibt, dass das "mittlere" Panel erstellt Raum zwischen den beiden, ähnlich wie die alten "

von html.

Danke,

Ben

Antwort

1

Sie GridLayout verwenden können YxZ Gitter in einer Komponente zu erstellen. Layout mehr zu konstruieren, genau können Sie verwenden GridBagLayout, die die volle Kontrolle von po bietet Unterteilung und Größenanpassung für verschachtelte Komponenten.

0

Ich bin immer mit NetBeans gehen. Da kann ich Free Design ohne irgendwelche Schwierigkeiten machen, die Komponenten auf dem JPanel oder JFrame zu platzieren :) Sie können es betrachten.

2

Wenn Sie ein vertikales Layout erstellen möchten, sollten Sie in BoxLayout nach dem umschließenden Container suchen. Dies kann auf Layout-Komponenten entlang der y-Achse eingestellt werden.

4

Wie Jim sagte, ist BoxLayout die richtige Wahl, wenn Sie Komponenten linear ausrichten müssen. Hier

ein Beispiel:

import javax.swing.BorderFactory; 
import javax.swing.BoxLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

/** 
* 
* @author nicholasdunn 
*/ 
public class BoxLayoutExample extends JPanel { 

    public BoxLayoutExample() { 
     JPanel topPanel = new JPanel(); 
     JPanel middlePanel = new JPanel(); 
     JPanel bottomPanel = new JPanel(); 

     topPanel.setBorder(BorderFactory.createEtchedBorder()); 
     middlePanel.setBorder(BorderFactory.createEtchedBorder()); 
     bottomPanel.setBorder(BorderFactory.createEtchedBorder()); 

     topPanel.add(new JLabel("Top")); 
     middlePanel.add(new JLabel("Middle")); 
     bottomPanel.add(new JLabel("Bottom")); 

     BoxLayout boxLayout = new BoxLayout(this, BoxLayout.PAGE_AXIS); 
     setLayout(boxLayout); 
     add(topPanel); 
     add(middlePanel); 
     add(bottomPanel); 

    } 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(""); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JPanel panel = new BoxLayoutExample(); 
     frame.add(panel); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 

alt text

Sie gut tun würde, um wirklich die introduction to layout managers lesen durch den Basissatz von LayoutManagers zu verstehen. Wenn es darum geht, komplexe Layouts zu erstellen, verwenden Sie bitte MigLayout anstatt zu versuchen, das GridBagLayout zu lernen - Sie werden mir danken.