MigLayout对齐中心不会成为JLabel组件的中心

时间:2014-07-26 23:15:52

标签: java swing layout-manager miglayout

我正在使用MigLayout我觉得它很灵活等等,但是我遇到了一个问题,就是把它集中在一起。我尝试使用gapleft 50%,但似乎百分比数字需要在不同的帧大小上更改,因为它还取决于组件的大小。因此,如果组件使用gapleft 25%居中,如果我调整框架的宽度,它将位于不同的位置。

我尝试过只使用align center并且它根本没有任何内容。

我也试过new CC().alignX("center").spanX()同样的事情:

img http://gyazo.com/8b562b6dd319d0af1d85cba930af0328.png

它是坚持左,但是当我使用gapleft它确实有效,为什么?

    super.setLayout(new MigLayout());
    this.loginPane = new LoginPanel();

    BufferedImage logo = ImageIO.read(new File("assets/logo.png"));
    JLabel logoLabel = new JLabel(new ImageIcon(logo));

    super.add(logoLabel, new CC().alignX("center").spanX());

1 个答案:

答案 0 :(得分:4)

  

它坚持到底,但是当我使用gapleft时它确实有效,为什么?

基于这一行:

super.setLayout(new MigLayout()); // why super? Did you override setLayout() method?

默认情况下,MigLayout行不会填充所有可用宽度,只会显示最长行(基于组件宽度)所需的宽度。说完这个JLabel符合徽标图像的宽度,仅此而且它看起来像是坚持左侧。您必须告诉布局管理器在实例化它时必须填充所有可用宽度:

super.setLayout(new MigLayout("fillx"));

或者

LC layoutConstraints = new LC();
layoutConstraints.setFillX(true);
super.setLayout(new MigLayout(layoutConstraints);

然后,您的组件约束将以exxx的形式工作。


图片

基于此代码段:

MigLayout layout = new MigLayout("fillx, debug");
JPanel content = new JPanel(layout);

JLabel label = new JLabel("Warehouse");
label.setFont(label.getFont().deriveFont(Font.BOLD | Font.ITALIC, 18));

CC componentConstraints = new CC();
componentConstraints.alignX("center").spanX();
content.add(label, componentConstraints);

enter image description here


注意: 您可以通过以下方式启用调试功能:

super.setLayout(new MigLayout("fillx, debug"));

或者

LC layoutConstraints = new LC();
layoutConstraints.setFillX(true);
layoutConstraints.setDebugMillis(500);
super.setLayout(new MigLayout(layoutConstraints);