Java-набор отключает цвет JButton в OSX

#java #swing #jbutton

#java #swing #jbutton

Вопрос:

Привет, я пытаюсь использовать несколько кнопок с отключенным цветом текста, отличным от кнопки к кнопке. Я сделал это в Windows, но не работаю в osx

 class TestButton{
    
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setLayout(null);
        f.setBounds(0,0,600,600);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton b = new JButton();
        b.setBounds(0,0,80,80);
        f.add(b);

        b.setUI(new MetalButtonUI() {
            protected Color getDisabledTextColor() {
                return Color.RED;
            }
        });
        
        b.setEnabled(false);
        
        f.setVisible(true);
    }
}
 

Я видел, что, хотя в Windows b.getUI возвращает MetalButtonUI, osx возвращает com.apple.laf.AquaButtonUI, но эта оценка ограничена.
Есть способ сделать это?
Спасибо

Ответ №1:

Предполагая, что вы хотите, чтобы ваши компоненты пользовательского интерфейса выглядели одинаково во всех операционных системах, создайте свой собственный набор с «фиксированным» пользовательским интерфейсом. Используйте этот idom:

 public class CustomButton extends JButton {
  public CustomButton() {
    setUI(new CustomButtonUI());
  }

  @Override
  public void updateUI() {
    // fixed UI
  }

  private static class CustomButtonUI extends BasicButtonUI {
    // ...
  }
}
 

Расширяется из базовых или металлических классов пользовательского интерфейса.

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

Комментарии:

1. ок, но кнопка не видна, если включена, анимация кнопки ecc отсутствует… должен ли я @Переопределить защищенный void paintComponent (Graphics g) и переделать все свойства кнопок?

2. Обычно это либо или. Либо вам нужен внешний вид (включая анимацию) операционной системы, либо вы хотите создать свой собственный. Иногда вам может сойти с рук просто изменение нескольких свойств, но у вас никогда не будет гарантии, как каждый внешний вид будет обрабатывать его (или полностью игнорировать его).