#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. Обычно это либо или. Либо вам нужен внешний вид (включая анимацию) операционной системы, либо вы хотите создать свой собственный. Иногда вам может сойти с рук просто изменение нескольких свойств, но у вас никогда не будет гарантии, как каждый внешний вид будет обрабатывать его (или полностью игнорировать его).