Вставки не соблюдаются - PullRequest
       13

Вставки не соблюдаются

2 голосов
/ 29 ноября 2011

Я пишу панель календаря для использования в приложении. Для отображения дней я использую JButtons. Поскольку я не хочу, чтобы кнопки занимали много места, у них нет вставок.

Вот как это выглядит в моем GTK +:
enter image description here
Все кнопки отображаются красиво и чисто.

Теперь вот как все выглядит, когда я переключаюсь на Metal laf:
enter image description here
Проще говоря, это неприемлемо.

Когда я устанавливаю вставки, помещая setMargins(new insets(0,0,0,0)) в конструктор пользовательской кнопки, все работает, и похоже, что я хочу, чтобы это выглядело.
enter image description here

Теперь эти кнопки - не единственные кнопки, на которые негативно влияют, и я не чувствую, что должен устанавливать их везде вручную, поэтому мне нужно более чистое решение. Я попытался установить поле по умолчанию для кнопки через UIManager.put("Button.margin", new Insets(0, 0, 0, 0));, но это никак не повлияло. Это сводит меня с ума, и я не знаю, как это повлияет на других лафов, таких как Aqua или Windows laf, но я боюсь худшего.

Edit: Просто проверил это в Windows XP и угадайте, что:
enter image description here

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();
    }
}

1 Ответ

3 голосов
/ 02 декабря 2011

Хорошо, я решил свою проблему, и, конечно, она была довольно простой, вот она.
Кнопки, которые я использую на панели календаря: JToggleButton s. «Button.margin» применяется только к JButton с. Поэтому все, что мне нужно было сделать, это добавить 1 строку:
UIManager.put("ToggleButton.margin", new Insets(0, 0, 0, 0));

Список предметов, которые вы можете установить в UIManager, можно найти здесь .

...