Der folgende Code stellt das Problem dar. Da ich die Höhen der nördlichen und südlichen Panels eingestellt habe, geht der Rest des Codes an das mittlere Panel mit GridLayout. Ich denke, dass, da es die übrig gebliebenen Pixel nicht gleichmäßig auf seine Zeilen verteilen kann, es sie einfach stehen lässt. Daher haben wir im untenstehenden Code eine hässliche weiße Linie über dem Süd-Panel.
Meine Frage ist hier: Wie kann sichergestellt werden, dass das GridLayout, wenn es nicht den gesamten Platz einnimmt, zumindest zentriert ist?
Normalerweise würde ich TableLayout verwenden und die Situation ist sortiert, aber da ich eine Antwort schrieb, wollte ich nur Standardmanager verwenden. Zu wissen, dies wäre sehr nützlich für mich danke im Voraus.
Ejemplo:
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);
}
}