如何在Java中创建覆盖窗口?

问题描述 投票:9回答:2

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

为此,我需要制作一个透明的叠加窗口,该窗口应放在顶部外国申请窗口的覆盖窗口应允许我放置小部件并在其上绘制文本。事件应转发到基础窗口,如果它们发生在透明区域(否则允许小部件以预期)。

我正在使用Java的OSX上执行此操作。我希望使用可移植到其他平台,但如果不可能的话,我会选择允许的解决方案我可以通过可可(Rococoa)或Carbon在OSX上执行此操作。

java cocoa swing macos overlay
2个回答
23
投票

实际上,我自己就能弄清楚这一点。似乎比我预期的要容易:

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();
    }
}

0
投票

如果您想为游戏或其他内容创建一个窗口,请使用JFrame。

© www.soinside.com 2019 - 2024. All rights reserved.