我有一个AWT组件(第三方库),我需要通过在其上显示半透明面板来掩盖它(在这种情况下为128的alpha)。有没有办法做到这一点?我查看了使用Sun的AWTUtilities类的“TransparentPanel”类,但是它的局限性是无法显示0< 0的像素。 alpha< 255.即使它不是一个漂亮的解决方案,我只是想找到一些方法来做到这一点。
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
据我所知,你不能这样做。更接近的是创建AWT组件的屏幕截图,同时在上面显示swing组件,并最终刷新屏幕捕获。这意味着本机组件实际上并不存在,并且在屏幕捕获模式下无法使用(不响应鼠标点击和键事件)。
这是DJ NativeSwing示例中的一个示例,用于在嵌入式Web浏览器上覆盖具有Alpha透明度的Swing PNG图像。查看演示:http://djproject.sourceforge.net/ns