BufferedImage上的JButton Transparency

Sim*_*iil 3 java swing transparency bufferedimage jbutton

我有个问题:

我在JFrame中渲染BufferedImage.然后我将JButton添加到同一帧.当我试图使按钮透明时,按钮变得透明,但是忽略它的实际位置,它总是透明的,就像它被卡在框架的左上角一样.我测试了一些不同的方法来使按钮透明,总是具有相同的结果.

有任何想法吗?

谢谢

public class TestPanel extends JPanel {

public TestPanel(){
    JButton foo = new JButton("test");
    foo.setBackground(new Color(0, 0, 0, 0));
    foo.setBounds(20, 100, 300, 50);
    this.add(foo);
}

public void paint(Graphics g){
    Graphics2D g2 = (Graphics2D) g;
    g2.drawImage(ImageFactory.getImg(), 0, 0, null); //get a BufferedImage
    g2.dispose();
}
Run Code Online (Sandbox Code Playgroud)

}

Hei*_*bug 7

我看到了几个问题,即使我不确定它们中的哪一个会导致你的问题.我尝试按顺序列出它们:

  1. TestPanel没有指定LayoutManager(我希望您在代码中的其他位置指定它).
  2. 您正在扩展一个JPanel不调用super paintComponent方法(不要使用paint).您应该在paintComponent方法中的任何其他内容之前执行此操作:

    public void paintComponent(Graphics g){
        super.paintComponent(g); 
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 删除dispose方法调用.你不能破坏你的图形对象.

编辑:

  1. 这是个问题:

    foo.setBounds(20, 100, 300, 50);
    
    Run Code Online (Sandbox Code Playgroud)

    您正在尝试显式设置JButton的边界.你不应该这样做.如果您使用的是LayoutManager,则可能会忽略此指令.如果您使用的是null布局,这也可能是个问题.