Я разрабатываю графический интерфейс на Java с помощью NetBeans, и мне нравится менять цвет текста отключенной кнопки на черный.
Следующая команда отлично работает с полем со списком:
UIManager.getDefaults().put("ComboBox.disabledForeground", Color.BLACK);
При использовании кнопки следующие команды не действуют:
UIManager.getDefaults().put("Button.disabledForeground", Color.BLACK);
или
UIManager.getDefaults().put("Button.disabledText", Color.BLACK);
Я надеюсь, что кто-нибудь может мне помочь.
Заранее спасибо.
Штеффен
Ответ 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();
}
}