Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Steffen KühnОтветов: 3

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

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

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

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

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

или

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

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

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

javauser-interfacebuttoncolorsswing

Ответы

Ответ 1 · рейтинг 1 · jmj

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

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

Ответ 2 · camickr

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

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

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

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

Ответ 3 · Christian

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

Итак, я закончил отладку кода свинга. Цвет определяется методом 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();
    }
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы