Как изменить цвет текста отключенной кнопки на черный в Java (NetBeans)?

Я разрабатываю графический интерфейс на Java с помощью NetBeans, и мне нравится менять цвет текста отключенной кнопки на черный.

Следующая команда отлично работает с полем со списком:

UIManager.getDefaults().put("ComboBox.disabledForeground", Color.BLACK);

При использовании кнопки следующие команды не действуют:

UIManager.getDefaults().put("Button.disabledForeground", Color.BLACK);

или

UIManager.getDefaults().put("Button.disabledText", Color.BLACK);

Я надеюсь, что кто-нибудь может мне помочь.

Заранее спасибо.
Штеффен


person Steffen Kühn    schedule 28.01.2011    source источник


Ответы (3)


 UIManager.getDefaults().put("Button.disabledText",Color.RED);

работает на меня

person jmj    schedule 28.01.2011
comment
Странно, в моей программе это не работает. Но, например, UIManager.getDefaults().put(Button.disabledShadow, Color.RED); работает. Но не с текстом.... - person Steffen Kühn; 28.01.2011
comment
попробуй с КРАСНЫМ. возможно в вашей системе сложно отличить серый от красного - person jmj; 28.01.2011
comment
Я пробовал разные цвета. Однако это не работает. Я также создал простое тестовое приложение, чтобы избежать побочных эффектов. - person Steffen Kühn; 28.01.2011
comment
Учитывается ли это или нет, зависит от используемого стиля Look and Feel. Не все L&F поддерживают это - person a_horse_with_no_name; 28.01.2011
comment
Хорошо, но для меня это странное поведение, потому что оно отлично работает для поля со списком. Возможно ли какое-либо обходное решение? - person Steffen Kühn; 28.01.2011

он отлично работает для поля со списком.

Настройки UIManager по умолчанию покажет, какие свойства можно изменить для вашего LAF.

Возможно ли какое-либо обходное решение?

Не легко. Это часть пользовательского интерфейса. Поэтому вам нужно будет создать и установить свой собственный пользовательский интерфейс кнопки. Иногда это относительно просто, но в большинстве случаев вам нужен доступ к защищенным или закрытым методам.

person camickr    schedule 28.01.2011

Этот вопрос довольно старый. Однако я столкнулся с той же проблемой и не нашел удовлетворительного ответа.

Итак, я закончил отладку кода свинга. Цвет определяется методом getColor в SynthStyle.class. Этот метод использует значения по умолчанию для отключенного состояния только для JTextComponent и JLabel. Похоже, что значения по умолчанию "Button.disabledText" и "Button[Disabled].textForeground" не используются, по крайней мере, с Nimbus LaF.

Наконец, я расширил JButton и переопределил getForegroundColor:

public class PatchedButton extends JButton {

    public PatchedButton(){
        super();
    }

    public PatchedButton(Icon icon){
        super(icon);
    }

    public PatchedButton(String text){
        super(text);
    }

    public PatchedButton(String text, Icon icon){
        super(text, icon);
    }

    @Override
    public Color getForeground() {
        //workaround
        if (!isEnabled()) {
                return  (Color)UIManager.getLookAndFeelDefaults().get("Button.disabledText");
        }
        return super.getForeground();
    }
}
person Christian    schedule 06.08.2019