Удалить заполнение JButton в MigLayout

У меня есть небольшое всплывающее окно:

Маленькая кнопка

Но мне не нужны отступы вокруг кнопки, я хочу, чтобы они были как можно меньше с предоставленным текстом.

btn.setMargin(new Insets(1, 1, 1, 1));
panel.add(lbl, "wrap");
panel.add(btn);
frame.pack();
frame.setVisible(true);

По крайней мере, это не работает... Можно ли этого добиться на MigLayout или мне следует использовать какой-либо другой менеджер компоновки для этого фрейма.


person Indrek    schedule 02.05.2010    source источник


Ответы (4)


Менеджер компоновки не должен влиять на способ рисования компонента.

У меня setMargin(...) отлично работает при использовании Metal LAF. Возможно, ваш LAF не поддерживает метод setMargin(). Или, может быть, у вас есть какой-то код в другом месте, который переопределяет предпочтительный размер кнопки, заставляя ее рисовать вот так.

Однако, если макет MIG окажется проблемой, вы можете попробовать Перенести макет.

person camickr    schedule 02.05.2010
comment
Большое спасибо! Всему виной внешний вид Substance Creme. - person Indrek; 03.05.2010
comment
Но мне кажется, что все субстанциальные скины делают это... Как-нибудь обойти это? - person Indrek; 03.05.2010

Каковы ваши 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

person Mike    schedule 03.05.2010
comment
Интересно, почему победил другой ответ, он гораздо точнее. - person Federico Giorgi; 30.03.2011

Приняв ответ Майка как стартап, я нашел в MIG «CheatSheet» возможное решение вашей проблемы.

Когда вы настраиваете MIGLayout, вы можете указать промежуток между компонентом с целым числом между квадратными скобками, определяющими столбцы и строки.

E.g.

MigLayout buttonMig = new MigLayout("", "[139px,grow]0[179px,grow]50[142px,grow][143px,grow]", "0[60px:60px:60px,center]");
person Federico Giorgi    schedule 30.03.2011

У меня тоже только что была эта проблема. Я обнаружил, что для меня работает следующее:

this.add(okButton, "width pref:pref:pref");

or

this.add(okButton, "wmax pref");

Также при использовании внешнего вида вещества есть функция, при которой минимальный размер всегда слишком велик. Это можно переопределить с помощью этого неясного хака.

okButton.putClientProperty(
    SubstanceLookAndFeel.BUTTON_NO_MIN_SIZE_PROPERTY, Boolean.TRUE);
person Adam    schedule 30.05.2012