11

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

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

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

4

1 回答 1

26

Java 教程展示了一种可以实现此目的的方法。这是另一种使用 RGBA(红、绿、蓝、alpha)值作为背景颜色的方法:

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();
    }
}
于 2009-11-20T03:27:53.927 回答