Wie zu beheben/center GridLayout-Objekt mit standard-Java-layout-Manager?

Den code unten repräsentiert das problem. Da ich die Höhen des Nord-und Süd-panels einstellen, der rest geht an das center-panel mit GridLayout. Ich denke, da es nicht teilen kann, die übrig gebliebenen Pixel gleichmäßig unter Ihren Reihen, es bleibt nur Sie. Deshalb wird im folgenden code haben wir hässliche weiße Linie über die south-panel.

Meine Frage hier ist: Wie stellen Sie sicher, dass, wenn das GridLayout ist nicht der ganze Raum ist es zumindest zentriert?

Normalerweise würde ich TableLayout und situation sortiert, aber da war ich schriftlich eine Antwort wollte ich nur standard-Manager. Dies zu wissen wäre sehr hilfreich für mich vielen Dank im Voraus.

Beispiel:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class AligningButonsTest
{
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {                   
                JFrame f = new JFrame();
                f.setSize(800, 600);
                double CONSTANT_FACTOR = .1;
                int noOfRows = 5;
                JPanel centerP = new JPanel(new GridLayout(noOfRows,1));

                for(int i = 0; i < noOfRows; i++)
                {   
                    BoxPanel bP = new BoxPanel();
                    centerP.add(bP);
                }
                JPanel contentPane = new JPanel(new BorderLayout());                
                f.setContentPane(contentPane);
                contentPane.add(centerP, BorderLayout.CENTER);
                JPanel southP = new JPanel();
                southP.setBackground(Color.RED.darker());//southP.setOpaque(false);
                southP.setPreferredSize(new Dimension(1, (int)(CONSTANT_FACTOR* f.getHeight())));
                contentPane.add(southP, BorderLayout.SOUTH);
                JPanel northP = new JPanel();
                northP.setBackground(Color.RED.darker());//northP.setOpaque(false);
                northP.setPreferredSize(new Dimension(1, (int)(CONSTANT_FACTOR* f.getHeight())));
                contentPane.add(northP, BorderLayout.NORTH);            
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setVisible(true);
            }
        });
    }   
}

class BoxPanel extends JPanel
{
    public BoxPanel()
    {
        setBorder(BorderFactory.createMatteBorder(1, 0, 1, 0, Color.RED));
        setBackground(Color.DARK_GRAY);
    }   
}
  • es gibt problem, dass einige LayoutManager ignoriert, auf die Größe für die PrefferedSize (BorderLayout, GridLaoyut), da sind wraped zu den Standorten oder Raster, wie ich weiß, nur GridBag können Anker + PrefferedSize direkt und gemeinsam, sicher, dass es existieren muss, einfach hack/workaroud für das ...
  • +1 @camicker @msj121 @trashgod ich gebe dir die Punkte morgen, ich habe alles für heute. Ich halte die Zentrierung Ausgabe sortiert Dank. Jetzt würde ich gerne wissen, wie füllen Sie Links über den Raum. Von dem, was ich verstehe, das ist jenseits der Fähigkeiten von GridLayout. Also, ich Frage mich, wie um sicherzustellen, dass z.B. GridBagLayout wird, füllen Sie alle Platz, z.B. der ersten und/oder letzten Zeile. Ich habe versucht, GridBagConstraints.gewichtigen = 1.0, wie in dem tutorial-Beispiel, aber nicht gut. Obwohl im Gegensatz zu tutorial Beispiel meine Breite ist immer perfekt gefüllt. Ist das problem spezifisch für dieses layout?
InformationsquelleAutor Boro | 2011-05-20
Schreibe einen Kommentar