如何在OS X上使用alwaysOnTop JFrame使Java Swing工具提示正常工作?

时间:2016-10-05 11:46:39

标签: java macos swing jframe always-on-top

在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,问题就会消失。

你可以设想任何解决方法吗?

0 个答案:

没有答案