Java布局管理器垂直中心

Ham*_*aya 11 java layout swing

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

我也尝试了边框布局并将其放置在中心,但它调整到窗口大小.

Mic*_*ers 23

尝试使用a 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 这就是我对gridbag的看法:http://madbean.com/anim/totallygridbag/ :) (5认同)
  • 我一直想知道如何做到这一点,最后我放弃了并使用了MigLayout. (2认同)

Sco*_*eld 10

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

试试BoxLayout:

Box verticalBox = Box.createVerticalBox();
verticalBox.add(Box.createVerticalGlue());
verticalBox.add(stuffToCenterVertically);
verticalBox.add(Box.createVerticalGlue());
Run Code Online (Sandbox Code Playgroud)

如果你想集中那些东西,请使用Horizo​​ntalBox作为stuffToCenterVertically:

Box horizontalBox = Box.createHorizontalBox();
horizontalBox.add(Box.createHorizontalGlue());
horizontalBox.add(stuffToCenter);
horizontalBox.add(Box.createHorizontalGlue());
Run Code Online (Sandbox Code Playgroud)

比Gridbag更容易在代码中"看到"

  • 我同意 GridBagLayout 通常更复杂,但为了使单个面板居中,它只有两行。 (2认同)