我正在使用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());
答案 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);
注意: 您可以通过以下方式启用调试功能:
super.setLayout(new MigLayout("fillx, debug"));
或者
LC layoutConstraints = new LC();
layoutConstraints.setFillX(true);
layoutConstraints.setDebugMillis(500);
super.setLayout(new MigLayout(layoutConstraints);