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