2

我有一个 AWT 组件(第 3 方库),我需要通过在它上面显示一个半透明面板来掩盖它(在这种情况下,alpha 为 128)。有没有办法做到这一点?我查看了使用 Sun 的 AWTUtilities 类的“TransparentPanel”类,但它有一个限制,即无法显示 0 < alpha < 255 的像素。即使这不是一个很好的解决方案,我只是在寻找一些方法来做这个。

4

2 回答 2

1

也许带有半透明油漆的 GlassPane 可以解决这个问题。这是一个简单的例子:

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class GlassFrame extends JComponent
{
    public GlassFrame()
    {
        super();
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        Graphics2D g2 = (Graphics2D)g.create();

        Paint p = new GradientPaint(
                0, 0, new Color(200,180,180,200), //Select RGB and Alpha values
                getWidth(), 0, new Color(0,0,0,0)
            );
        g2.setPaint(p);
        g2.fillRect(0, 0, getWidth(), getHeight());

        g2.dispose();
    }

    public static void main(String args[])
    {
        JFrame jf = new JFrame("Simple test");
        jf.add(new JPanel());
        GlassFrame g = new GlassFrame();

        jf.setSize(300,300);
        jf.setVisible(true);

        jf.setGlassPane(g);
        g.setVisible(true);
     }
}
于 2011-02-16T23:33:46.233 回答
0

据我所知,你不能这样做。更接近的是创建 AWT 组件的屏幕截图,同时将在上面显示一个摆动组件,并最终不时刷新屏幕截图。这意味着本机组件实际上并不存在,并且在屏幕捕获模式下无法使用(不响应鼠标点击和按键事件)。

这是 DJ NativeSwing 示例之一在嵌入式 Web 浏览器上方覆盖具有 alpha 透明度的 Swing PNG 图像。查看演示:http ://djproject.sourceforge.net/ns

于 2011-02-22T23:11:32.217 回答