Я пишу панель календаря для использования в приложении. Для отображения дней я использую JButtons. Поскольку я не хочу, чтобы кнопки занимали много места, у них нет вставок.
Вот как это выглядит в моем GTK +:
Все кнопки отображаются красиво и чисто.
Теперь вот как все выглядит, когда я переключаюсь на Metal laf:
Проще говоря, это неприемлемо.
Когда я устанавливаю вставки, помещая setMargins(new insets(0,0,0,0))
в конструктор пользовательской кнопки, все работает, и похоже, что я хочу, чтобы это выглядело.
Теперь эти кнопки - не единственные кнопки, на которые негативно влияют, и я не чувствую, что должен устанавливать их везде вручную, поэтому мне нужно более чистое решение.
Я попытался установить поле по умолчанию для кнопки через UIManager.put("Button.margin", new Insets(0, 0, 0, 0));
, но это никак не повлияло.
Это сводит меня с ума, и я не знаю, как это повлияет на других лафов, таких как Aqua или Windows laf, но я боюсь худшего.
Edit:
Просто проверил это в Windows XP и угадайте, что:
Edit2:
Main () создает и показывает этот кадр. На нем есть несколько компонентов, созданных initComponents()
. initComponents()
был создан Netbeans и имеет pack()
в конце.
public class MainForm
extends javax.swing.JFrame
{
public MainForm()
{
String os = System.getProperty("os.name").toLowerCase();
String laf = null;
if (os.contains("win"))
{
laf = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
}
else if (os.contains("nix") || os.contains("nux"))
{
laf = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
}
else if (os.contains("mac"))
{
laf = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
}
try
{
UIManager.put("Button.margin", new Insets(0, 0, 0, 0));
UIManager.setLookAndFeel(laf);
SwingUtilities.updateComponentTreeUI(this);
System.out.println(UIManager.getLookAndFeel().toString());
}
catch (Exception ex)
{
System.out.println(ex.toString());
}
initComponents();
}
}