在OS X上,使用Java的Swing GUI框架制作的“alwaysOnTop”JFrame在显示后几乎立即轻易地轻弹工具提示。
这个问题几乎无法解释,但可以用很少的代码复制。如果您在Mac上使用Java,我能做的最好就是请您尝试这个自包含的代码示例:
import javax.swing.*;
public class ScratchSpace {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("Test");
// setting alwaysOnTop to false makes the problem go away
frame.setAlwaysOnTop(true);
JPanel contentPane = new JPanel();
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.LINE_AXIS));
JLabel label1 = new JLabel("I have a tooltip");
label1.setToolTipText("This is the the tooltip for label 1.");
JLabel label2 = new JLabel("I have a tooltip too.");
label2.setToolTipText("This is the the tooltip for label 2.");
contentPane.add(label1);
contentPane.add(Box.createHorizontalStrut(50));
contentPane.add(label2);
contentPane.setBorder(BorderFactory.createEmptyBorder(100, 10, 100, 0));
frame.setContentPane(contentPane);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
运行代码,然后将鼠标指针从JFrame外部移动到两个标签之一的顶部。您应该看到工具提示闪烁几分之一秒然后消失。
我无法在Windows上重现这一点。
我在macOS Sierra上使用Java 1.8.0_101。我可以在早期版本的OS X和早期版本的Java上重现它。
如果JFrame未设置为alwaysOnTop,问题就会消失。
你可以设想任何解决方法吗?