Java 7, kolor tekstu przycisku podczas używania etykiet w formacie HTML

Mam niestandardowy interfejs użytkownika dla niektórych przycisków, zaimplementowany przez podklasę MetalButtonUI. Przyciski używają etykiet w formacie HTML. To jest dla mnie wymaganie, muszę obsługiwać etykiety przycisków wielowierszowych.

Z jakiegoś powodu, gdy moja aplikacja działa na Javie 7 (aktualizacja naukowo 4, najbardziej aktualna) kolor tekstu, gdy przycisk jest wyłączony, jest teraz szary. Nie dzieje się tak podczas uruchamiania na Javie 4 lub 6.

W kodzie HTML etykiety przycisku mogę ustawić kolor czcionki za pomocą<font color=..> Jednak ta wartość jest ignorowana, gdy przycisk jest wyłączony. Wydaje się, że gdzieś, mój kolor czcionki jest nadpisany, gdy przycisk jest wyłączony. Za pomocą<body style='color: ..'> jest również nieskuteczny.

Próbowałem ustawić Button.disabledText w UIDefaults. To nie jest to, co naprawdę chcę robić, ponieważ wpływa na zbyt wiele przycisków. Ale w każdym razie nie jest to skuteczne w przypadku etykiet w formacie HTML.

MetalButtonUI definiuje getDisabledTextColor, ale jego implementacja nie jest skuteczna.

Podobnie implementacja metody paintText nie jest skuteczna. Nie jest wywoływany dla etykiet w formacie HTML.

Mógłbym zastąpić całą metodę malowania, ale to wydaje się zbyt skomplikowanym rozwiązaniem.

W tym obszarze poprawiono błąd, o którym poinformowano, że naprawiono w Javie 7, zobaczhttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4783068 Zgłoszenie błędu nie jest jednak dla mnie jasne. Nie jest jasne, co konkretnie zostało zmienione, ani jak zmienić nowe zachowanie.

Czy ktoś wie, jak kontrolować kolor tekstu dla wyłączonych przycisków?

EDYCJA: Przepraszam, że powinienem dołączyć przykładowy kod od samego początku. Mój oryginalny kod miał niestandardowe klasy dla przycisku i dla interfejsu użytkownika, z niestandardowymi metodami paint () w klasie UI. Ale teraz widzę, że podstawowy problem można zademonstrować bardzo prosto, po prostu wywołując button.setForeground (Color.black); W Javie 6 ma to wpływ na kolor tekstu dla stanów włączonych i wyłączonych. W Javie 7 wpływa tylko na stan włączony. mKorbel ... dziękuję za pomoc w wyizolowaniu problemu !!!!

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

Edytuj # 2: to jest teraz śledzone jako błąd przez Oracle, zobaczhttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7176683

questionAnswers(2)

yourAnswerToTheQuestion