如何在Java中创建叠加窗口?

Sam*_*ami 9 java macos cocoa swing overlay

我正在尝试为外国应用程序创建HUD样式显示.

为此,我需要创建一个透明的覆盖窗口,它将放置在外部应用程序的窗口之上.叠加窗口应该允许我放置小部件并在其上绘制文本.事件应该转发到底层窗口,如果它们发生在透明区域上(否则允许窗口小部件按预期工作).

我在OSX上用Java做这个.我希望用纯Java实现这一点,并且可以移植到其他平台,但是如果不可能的话,我可以使用只允许我通过Cocoa(Rococoa)或Carbon在OSX上执行此操作的解决方案.

Sam*_*ami 22

实际上,能够自己解决这个问题.似乎比我预期的更容易:

public class Overlay {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Transparent Window");
        frame.setUndecorated(true);
        frame.setBackground(new Color(0, 0, 0, 0));
        frame.setAlwaysOnTop(true);
        // Without this, the window is draggable from any non transparent
        // point, including points  inside textboxes.
        frame.getRootPane().putClientProperty("apple.awt.draggableWindowBackground", false);

        frame.getContentPane().setLayout(new java.awt.BorderLayout());
        frame.getContentPane().add(new JTextField("text field north"), java.awt.BorderLayout.NORTH);
        frame.getContentPane().add(new JTextField("text field south"), java.awt.BorderLayout.SOUTH);
        frame.setVisible(true);
        frame.pack();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 别忘了"frame.pack()"! (4认同)