Java Swing:如何知道JComponent的像素是否透明?

Java Swing:如何知道JComponent的像素是否透明?,java,swing,Java,Swing,有没有办法判断JComponent(如JEditorPane、JPanel等)的像素是否透明 我知道,对于JFrame或JDialog这样的顶级容器,getContentPane().paintAll()可以用于BufferedImage。然后我们可以使用getRGB(x,y)获得(x,y)处像素的颜色和透明度 然而,这种方法并没有告诉我单个组件的颜色。有没有办法知道低级容器的像素颜色 更多信息: 我这样做的目的是让JEditorPane表现得像一个透明的覆盖层。JEditorPane可以包含文

有没有办法判断JComponent(如JEditorPane、JPanel等)的像素是否透明

我知道,对于JFrame或JDialog这样的顶级容器,
getContentPane().paintAll()
可以用于
BufferedImage
。然后我们可以使用
getRGB(x,y)
获得
(x,y)
处像素的颜色和透明度

然而,这种方法并没有告诉我单个组件的颜色。有没有办法知道低级容器的像素颜色

更多信息

我这样做的目的是让JEditorPane表现得像一个透明的覆盖层。JEditorPane可以包含文本、图片等,但其背景是透明的


如果鼠标事件发生在JEditorPane的透明像素上,我希望将其转发到JEditorPane下的组件,但如果像素不透明,则处理方式会有所不同。

您可以尝试修改我的,以满足您的要求

public static boolean isTransparent(Component c, Point p) {
    Rectangle rect = c.getBounds();
    BufferedImage img = new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_ARGB);
    c.paintAll(img.createGraphics());
    return new Color(img.getRGB(p.x, p.y), true).getAlpha() == 0;
}

这在很大程度上取决于你想做什么(以及为什么)。Swing组件要么是完全不透明的,要么是完全透明的,因此您可以检查组件层次结构并检查
isOpaque
getBackground
@MadProgrammer。大多数Swing组件可以通过设置背景(新颜色(0,0,0,0))
获得透明背景;一旦这样做了,Swing组件将同时具有透明和不透明像素。实际上,这是行不通的,因为正如我所说的,Swing组件要么是完全不透明的,要么是完全透明的,唯一能使组件透明的方法是使用
setOpaque
。。。你不会相信,对于许多Swing组件(包括
JEditorPane
,自己试试看),设置
setOpaque(false)
会导致透明的背景像素没有被绘制,但所有东西都会被绘制。是的,但这与使用基于alpha的颜色不同。您“可以”覆盖该功能,您了解外观和感觉代理是如何工作的,并且您还考虑了
JScrollPane
-我没有意识到该解决方案也可以与其他组件一起工作!非常感谢。