我做了一个SSCCE。请注意,它必须是 Windows Look&Feel。
import java.awt.*;
import javax.swing.*;
public class DefaultButtonBug {
private static final String LAF_WINDOWS = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(LAF_WINDOWS);
} catch (Exception ex) {
System.out.println("Setting the L&F failed so I cannot reproduce the bug.");
System.exit(1);
}
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JPanel content = new JPanel();
JButton defaultButton = new JButton("Default");
content.add(defaultButton);
JFrame frame = new JFrame();
frame.getRootPane().setDefaultButton(defaultButton);
frame.setContentPane(content);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
});
}
}
- 启动这个
- 按钮应该是焦点。如果没有,请单击它。
- 单击任何其他窗口,以确保当前窗口失去焦点
- 即使此窗口不再有焦点,该按钮仍以蓝色调显示动画!
按钮“脉冲”动画在标准 Java L&F 中是不存在的。
注意当这个按钮不再是默认按钮时(去掉代码中的相应行),窗口失去焦点后按钮会变灰,没有任何动画。
我的问题是:这被认为是一个错误吗?因为当窗口也隐藏在另一个窗口后面时,这使得 EDT 继续做事而不是空闲(我做了一些分析)。事实上,这是最困扰我的事情:隐藏窗口不会让 EDT 闲置。