Java 7, color del texto del botón cuando se usan etiquetas con formato HTML

Tengo una IU personalizada para ciertos botones, implementada mediante la subclasificación de MetalButtonUI. Los botones utilizan etiquetas con formato HTML. Este es un requisito para mí, necesito admitir etiquetas de botones multilínea.

Por alguna razón, cuando mi aplicación se ejecuta en Java 7 (actualización científica 4, la más actual), el color del texto cuando el botón está desactivado ahora es gris. Esto no sucede cuando se ejecuta en Java 4 o 6.

En el HTML para la etiqueta del botón, puedo configurar el color de la fuente usando<font color=..> Sin embargo, este valor se ignora cuando el botón está deshabilitado. Parece que en algún lugar, mi color de fuente se anula cuando el botón está deshabilitado. Utilizando<body style='color: ..'> También es ineficaz.

He intentado configurar Button.disabledText en UIDefaults. Esto no es lo que realmente quiero hacer porque afecta demasiados botones. Pero en cualquier caso, no es efectivo para etiquetas de botones con formato HTML.

MetalButtonUI define getDisabledTextColor, pero su implementación no es efectiva.

De manera similar, la implementación del método paintText no es efectiva. No se invoca para etiquetas con formato HTML.

Podría anular todo el método de pintura, pero eso parece una solución demasiado compleja.

Hubo una corrección de errores en esta área, reportada como corregida en Java 7, veahttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4783068 Sin embargo, el informe de errores no es muy claro para mí. No está claro qué se cambió específicamente, o cómo anular el nuevo comportamiento.

¿Alguien sabe cómo controlar el color del texto para los botones desactivados?

EDIT: Lo siento, debería haber incluido código de ejemplo desde el principio. Mi código original tenía clases personalizadas para el botón y para la interfaz de usuario, con métodos personalizados de pintura () en la clase de interfaz de usuario. Pero ahora veo que el problema central se puede demostrar de manera muy simple, con solo una llamada a button.setForeground (Color.black); En Java 6, esto afecta el color del texto para los estados habilitados y deshabilitados. En Java 7 afecta solo el estado habilitado. mKorbel ... ¡Gracias por ayudarnos a aislar el problema!

    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();
                }
            });
        }
    }

Edición n. ° 2: Oracle ahora hace un seguimiento de esto como un error.http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7176683

Respuestas a la pregunta(2)

Su respuesta a la pregunta