如何使Java Swing工具提示在OS X上与alwaysOnTop JFrames一起正常工作?
在OSX上,使用Java的SwingGUI框架制作的“alwaysOnTop”JFrame几乎在显示工具提示后立即不定期地弹出工具提示 这个问题几乎太模糊了,无法解释,但只需很少的代码就可以重现。如果您在Mac上使用Java,我所能做的就是请您尝试以下自包含的代码示例:如何使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
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工具。有人可以找到这个工具。我们通过应用程序中的一些对话框实现了这一点,但我们并没有使用“始终在顶部”。