JButton поля. Не соблюдается, когда нимб плаф

Недвижимость margin из JButton не соблюдается, когда устанавливается внешний вид нимба.
, Мне нужны некоторые "маленькие" кнопки, но nimbus заставляет пространство вокруг текста кнопки быть большим, поэтому я получаю только "очень большие" кнопки.
Я обнаружил на странице значений по умолчанию в nimbus, что есть свойство под названием:

Button.contentMargins

это предустановлено с большими значениями.
Я попытался переопределить его с помощью следующего кода:

UIManager.getDefaults().put("Button.contentMargins", new InsetsUIResource(0,0,0,0));

в main, сразу после установки нимба смотри и чувствуй.

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

2 ответа

Решение

Изменение значения JComponent.sizeVariant также может быть эффективным, как описано в разделе "Изменение размера компонента".

На основе темы Как изменить цвет фона для JPanels с Nimbus Look and Feel? можно изменить и назначить одно значение для чего-либо из Nimbus Defaults,

но вы уверены, что вам нужен этот вывод в графический интерфейс, ничего хорошего

введите описание изображения здесь

против базового JButton с Nimbus L&F

введите описание изображения здесь

из кода

import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.InsetsUIResource;

public class NimbusJPanelBackGround {

    public NimbusJPanelBackGround() {
        JButton btn = new JButton("  Whatever  ");
        JButton btn1 = new JButton("  Whatever  ");
        JPanel p = new JPanel();
        p.add(btn);
        p.add(btn1);
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        f.add(p, BorderLayout.CENTER);
        f.setSize(200, 100);
        f.setLocation(150, 150);
        f.setVisible(true);
    }

    public static void main(String[] args) {

        try {
            for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(laf.getName())) {
                    UIManager.setLookAndFeel(laf.getClassName());
                    UIManager.getLookAndFeelDefaults().put("Panel.background", Color.white);
                    UIManager.getLookAndFeelDefaults().put("Button.contentMargins", new InsetsUIResource(0,0,0,0));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                NimbusJPanelBackGround nimbusJPanelBackGround = new NimbusJPanelBackGround();
            }
        });
    }
}

ранее +1 за интересный вопрос

Другие вопросы по тегам