2010-11-19 18 views
3

Ich habe eine Klasse, die eine JPanel namens Row erweitert. Ich habe eine Reihe von Reihe zu einem JLabel hinzugefügt, ist der Code, den folgenden:Einstellen der Größe eines JPanel

JFrame f=new JFrame(); 

JPanel rowPanel = new JPanel(); 
//southReviewPanel.setPreferredSize(new Dimension(400,130)); 
rowPanel.setLayout(new BoxLayout(rowPanel, BoxLayout.Y_AXIS)); 
rowPanel.add(test1); 
rowPanel.add(test1); 
rowPanel.add(test2); 
rowPanel.add(test3); 
rowPanel.add(test4); 
rowPanel.setPreferredSize(new Dimension(600, 400)); 
rowPanel.setMaximumSize(rowPanel.getPreferredSize()); 
rowPanel.setMinimumSize(rowPanel.getPreferredSize()); 

f.setSize(new Dimension(300,600)); 

JScrollPane sp = new JScrollPane(rowPanel); 
sp.setSize(new Dimension(300,600)); 
f.add(sp); 

f.setVisible(true); 

wo test1 ... etc eine Reihe ist. Wenn ich jedoch die Größe des Fensters ändere, wird das Layout der Zeile irgendwie unordentlich (es ändert sich auch die Größe) ... wie kann ich das verhindern?

Antwort

3

Lesen Sie das Swing-Tutorial unter Using Layout Managers. Jeder Layout-Manager hat eigene Regeln, was passiert, wenn die Größe des Containers geändert wird. Experimentieren und spielen.

Im Falle eines BoxLayout sollte es die maximale Größe der zu der Platte hinzugefügten Komponenten respektieren, so dass Sie tun können:

childPanel.setMaximumSize(childPanel.getPreferredSize()); 

Wenn Sie Post Ihre SSCCE demonstriert das Problem mehr Hilfe benötigen.

+0

Ich habe geändert mit getPreferredSize und setMaximumSize wie Sie oben vorgeschlagen (siehe meinen bearbeiteten Code) ... immer noch, es ist wie der Code überhaupt nicht existiert. Was ist, wenn ich ein Rahmenlayout habe? Wie lege ich die Größe fest? BorderLayout wird nicht in dem Link erwähnt, den Sie oben angegeben haben. – aherlambang

+0

http://download.oracle.com/javase/tutorial/uiswing/layout/border.html – Cesar

+0

Ihr bearbeiteter Code ist KEIN SSCCE. Ja, der Link erwähnt ein BorderLayout. Es gibt keine Möglichkeit, dass Sie den ganzen Abschnitt in 6 Minuten gelesen haben könnten !!! Ein Layout-Manager arbeitet mit den Komponenten, die dem Panel hinzugefügt wurden, und nicht mit dem Panel selbst. – camickr

1

nahm ich den Code in http://download.oracle.com/javase/tutorial/uiswing/examples/layout/BoxLayoutDemoProject/src/layout/BoxLayoutDemo.java und angepasst es mit dem, was Sie zu tun versuchen, nur Knöpfe anstelle von benutzerdefinierten JPanels mit:

public class BoxLayoutDemo { 
    public static void addComponentsToPane(Container pane) { 
     JPanel rowPanel = new JPanel(); 
     pane.add(rowPanel); 

     rowPanel.setLayout(new BoxLayout(rowPanel, BoxLayout.Y_AXIS)); 
     rowPanel.add(addAButton("Button 1")); 
     rowPanel.add(addAButton("Button 2")); 
     rowPanel.add(addAButton("Button 3")); 
     rowPanel.add(addAButton("Button 4")); 
     rowPanel.add(addAButton("5")); 
     rowPanel.setPreferredSize(new Dimension(600, 400)); 
     rowPanel.setMaximumSize(rowPanel.getPreferredSize()); 
     rowPanel.setMinimumSize(rowPanel.getPreferredSize()); 
    } 

    private static JButton addAButton(String text) { 
     JButton button = new JButton(text); 
     button.setAlignmentX(Component.CENTER_ALIGNMENT); 
     return button; 
    } 

    private static void createAndShowGUI() { 
     JFrame frame = new JFrame("BoxLayoutDemo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Set up the content pane. 
     addComponentsToPane(frame.getContentPane()); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

Das Endergebnis ist dieses: alt text

Wie Sie kann sehen, die Tastenreihe ist perfekt ausgerichtet. Wenn Sie die Größe des JFrame ändern, bleiben diese ausgerichtet. Ist das wonach Sie suchen?

Verwandte Themen