Java 7, цвет текста кнопки при использовании меток в формате HTML

У меня есть пользовательский интерфейс для определенных кнопок, реализованный путем создания подкласса MetalButtonUI. Кнопки используют метки в формате HTML. Это требование для меня, мне нужно поддерживать многострочные метки кнопок.

По какой-то причине, когда мое приложение работает на Java 7 (научно обновленное 4, самое последнее), цвет текста, когда кнопка отключена, теперь серый. Это не происходит при работе на Java 4 или 6.

В HTML-коде для метки кнопки я могу установить цвет шрифта, используя<font color=..> Однако это значение игнорируется, когда кнопка отключена. Кажется, где-то, мой цвет шрифта переопределяется, когда кнопка отключена. С помощью<body style='color: ..'> тоже неэффективно.

Я пытался установить Button.disabledText в UIDefaults. Это не то, что я действительно хочу сделать, потому что это влияет на слишком много кнопок. Но в любом случае это неэффективно для ярлыков кнопок в формате HTML.

MetalButtonUI определяет getDisabledTextColor, но его реализация неэффективна.

Точно так же реализация метода paintText не эффективна. Он не вызывается для меток в формате HTML.

Я мог бы переопределить весь метод рисования, но это кажется слишком сложным решением.

В этой области было исправление, сообщалось, что исправлено в Java 7, см.http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4783068 Однако отчет об ошибке не очень понятен для меня. Непонятно, что конкретно было изменено или как переопределить новое поведение.

Кто-нибудь знает, как управлять цветом текста для отключенных кнопок?

РЕДАКТИРОВАТЬ: Извините, я должен был включить пример кода с самого начала. В моем исходном коде были пользовательские классы для кнопки и для пользовательского интерфейса, с пользовательскими методами paint () в классе пользовательского интерфейса. Но теперь я вижу, что основная проблема может быть продемонстрирована очень просто, просто вызвав button.setForeground (Color.black); В Java 6 это влияет на цвет текста для включенных и отключенных состояний. В Java 7 это влияет только на включенное состояние. mKorbel ... спасибо, что помог изолировать проблему !!!!

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;

    import javax.swing.*;


    public class DisabledButtonDemo {


        public DisabledButtonDemo() {
            final JToggleButton button = new JToggleButton(
               "<html><center>Button<br/>Label</center></html>");      

            // Next line sets the text color. 
            // In Java 6 it is respected, for both enabled and disabled state.
            // In Java 7, it is only used for the enabled state.
            button.setForeground(Color.black); 
            button.setPreferredSize(new Dimension(100, 100));

            final JButton controlButton = new JButton(
               "Toggle Enabled/Disabled");
            controlButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    button.setEnabled(!button.isEnabled());
                }
            });

            JFrame f = new JFrame("ButtonTest");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setLayout(new GridLayout(2,1));
            f.add(button);
            f.add(controlButton);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }

        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    DisabledButtonDemo t = new DisabledButtonDemo();
                }
            });
        }
    }

Редактирование # 2: теперь это отслеживается как ошибка Oracle, см.http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7176683

Ответы на вопрос(2)

Ваш ответ на вопрос