Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使Java Swing工具提示在OS X上与alwaysOnTop JFrames一起正常工作?_Java_Macos_Swing_Jframe_Always On Top - Fatal编程技术网

如何使Java Swing工具提示在OS X上与alwaysOnTop JFrames一起正常工作?

如何使Java Swing工具提示在OS X上与alwaysOnTop JFrames一起正常工作?,java,macos,swing,jframe,always-on-top,Java,Macos,Swing,Jframe,Always On Top,在OSX上,使用Java的SwingGUI框架制作的“alwaysOnTop”JFrame几乎在显示工具提示后立即不定期地弹出工具提示 这个问题几乎太模糊了,无法解释,但只需很少的代码就可以重现。如果您在Mac上使用Java,我所能做的就是请您尝试以下自包含的代码示例: import javax.swing.*; public class ScratchSpace { public static void main(String[] args) { SwingUtil

在OSX上,使用Java的SwingGUI框架制作的“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上使用Java1.8.0101。我可以在OSX的早期版本和Java的早期版本上复制它

如果JFrame没有设置为alwaysOnTop,问题就会消失


您能想到的任何解决方法?

JFrame忽略setAlwaysOnTop,此方法适用于JDialog,专为具有父级的容器而设计,如果在使用之前有适当优化的工具提示(例如ToolTimManager.sharedInstance()),是否有一些区别(我不是OSX用户).XxxJFrame对我来说不会忽略Windows和OS X上的setAlwaysOnTop——我正在广泛使用它来创建HUD工具。有人可以找到这个工具。我们通过应用程序中的一些对话框实现了这一点,但我们并没有使用“始终在顶部”。