我有一个像这样的小“弹出窗口”:
但我不想在按钮周围填充,我希望它与提供的文本一样小。
btn.setMargin(new Insets(1, 1, 1, 1));
panel.add(lbl, "wrap");
panel.add(btn);
frame.pack();
frame.setVisible(true);
至少这不起作用...... 可以在MigLayout上实现,还是应该为此框架使用其他布局管理器。
答案 0 :(得分:4)
它构建的MigLayout
约束是什么?如果您还没有,可以尝试使用novisualpadding
。此外,debug
布局约束将在组件周围绘制框以显示它们占用的空间。 (我认为红色虚线是组件的大小,蓝色虚线是组件所在的“单元”。)
// old version
// JPanel panel = new JPanel(new MigLayout());
// new verion
JPanel panel = new JPanel(new MigLayout("debug, novisualpadding"));
我经常使用MigLayout并且发现“备忘单”非常有用。 http://migcalendar.com/miglayout/cheatsheet.html
答案 1 :(得分:1)
布局管理器不应影响组件的绘制方式。
使用Metal LAF时,setMargin(...)对我来说很好。也许你的LAF不支持setMargin()方法。或者你可能在其他地方有一些代码覆盖按钮的首选大小,导致它像这样绘制。
但是,如果MIG布局成为问题,您可以尝试Wrap Layout。
答案 2 :(得分:1)
将MIke作为创业公司的答案,我在MIG“CheatSheet”中找到了解决问题的可能方案。
设置MIGLayout时,可以使用定义列和行的方括号之间的整数指定组件之间的间隙。
E.g。
MigLayout buttonMig = new MigLayout("", "[139px,grow]0[179px,grow]50[142px,grow][143px,grow]", "0[60px:60px:60px,center]");
答案 3 :(得分:1)
我刚刚遇到这个问题。我发现以下内容对我有用:
this.add(okButton, "width pref:pref:pref");
或
this.add(okButton, "wmax pref");
此外,当使用物质外观时,最小尺寸总是太宽。这可以用这个模糊的黑客来覆盖。
okButton.putClientProperty(
SubstanceLookAndFeel.BUTTON_NO_MIN_SIZE_PROPERTY, Boolean.TRUE);