我有一个像这样的小“弹出窗口”:
但我不希望按钮周围的填充,我希望它与提供的文本一样小。
btn.setMargin(new Insets(1, 1, 1, 1));
panel.add(lbl, "wrap");
panel.add(btn);
frame.pack();
frame.setVisible(true);
至少这不起作用......这可以在 MigLayout 上实现,还是我应该为此框架使用其他一些布局管理器。
我有一个像这样的小“弹出窗口”:
但我不希望按钮周围的填充,我希望它与提供的文本一样小。
btn.setMargin(new Insets(1, 1, 1, 1));
panel.add(lbl, "wrap");
panel.add(btn);
frame.pack();
frame.setVisible(true);
至少这不起作用......这可以在 MigLayout 上实现,还是我应该为此框架使用其他一些布局管理器。
构建它的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
以 MIke 的回答作为一家初创公司,我在 MIG“CheatSheet”中发现了解决您问题的可能方法。
设置 MIGLayout 时,您可以使用定义列和行的方括号之间的整数来指定组件之间的间隙。
例如
MigLayout buttonMig = new MigLayout("", "[139px,grow]0[179px,grow]50[142px,grow][143px,grow]", "0[60px:60px:60px,center]");
我也刚遇到这个问题。我发现以下内容对我有用:
this.add(okButton, "width pref:pref:pref");
或者
this.add(okButton, "wmax pref");
此外,在使用该物质的外观和感觉时,还有一个特征是最小尺寸总是太宽。这可以被这个晦涩的黑客覆盖。
okButton.putClientProperty(
SubstanceLookAndFeel.BUTTON_NO_MIN_SIZE_PROPERTY, Boolean.TRUE);
布局管理器不应影响组件的绘制方式。
使用 Metal LAF 时,setMargin(...) 对我来说效果很好。也许您的 LAF 不支持 setMargin() 方法。或者,也许您在其他地方有一些代码覆盖了按钮的首选大小,导致它像这样绘制。
但是,如果 MIG 布局出现问题,您可以尝试Wrap Layout。