Java 布局管理器垂直中心

2022-09-03 09:41:44

我有使用组布局来组织一些标签的面板。我想在调整大小时保持屏幕的面板中心。如果我使用流布局将面板放在另一个面板内,我可以保持标签水平居中,但不垂直。哪个布局管理器允许我将面板保持在屏幕中间的居中位置?

我还尝试了边框布局并将其放置在中心,但它会调整为窗口大小。


答案 1

尝试使用 GridBagLayout 并添加带有空 GridBagConstrants 对象的面板。
例如:

public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setLayout(new GridBagLayout());
    JPanel panel = new JPanel();
    panel.add(new JLabel("This is a label"));
    panel.setBorder(new LineBorder(Color.BLACK)); // make it easy to see
    frame.add(panel, new GridBagConstraints());
    frame.setSize(400, 400);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
}

答案 2

首先,我应该提到,阅读我关于布局的文章:http://web.archive.org/web/20120420154931/http://java.sun.com/developer/onlineTraining/GUI/AWTLayoutMgr/。它很旧,但非常有用(不幸的是,那篇文章早于BoxLayout。当我在JavaOne上发表演讲时,我有一些幻灯片,其中包括 Http://javadude.com/articles/javaone)

试用 BoxLayout:

Box verticalBox = Box.createVerticalBox();
verticalBox.add(Box.createVerticalGlue());
verticalBox.add(stuffToCenterVertically);
verticalBox.add(Box.createVerticalGlue());

如果你想把这些东西居中,使用 HorizontalBox 作为 StuffToCenterVertically:

Box horizontalBox = Box.createHorizontalBox();
horizontalBox.add(Box.createHorizontalGlue());
horizontalBox.add(stuffToCenter);
horizontalBox.add(Box.createHorizontalGlue());

在代码中比网格袋更容易“看到”的方式