java - BufferedImage 上的 JButton 透明度

标签 java swing transparency jbutton bufferedimage

我有一个问题:

我正在 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();
}

最佳答案

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

  1. 您的 TestPanel 没有指定 LayoutManager(我希望您在代码的其他地方指定了它)。
  2. 您正在扩展 JPanel,但没有调用 super paintComponent 方法(不要使用 paint)。你应该在你的 paintComponent 方法中做任何其他事情之前这样做:

    public void paintComponent(Graphics g){
        super.paintComponent(g); 
    }
    
  3. 删除 dispose 方法调用。您不得破坏您的图形对象。

编辑:

  1. 这是一个问题:

    foo.setBounds(20, 100, 300, 50);
    

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

关于java - BufferedImage 上的 JButton 透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7385573/

相关文章:

java - 将处理应用程序组合成一个大的可执行文件?

Delphi - 文本打印在黑色背景上

delphi - 如何从剪贴板保存 PngImage

java - 排序后重新为 JTable 着色

java - 在 Swing 应用程序中显示 HTML 表单并与之交互

java - 渲染透明 2D 图像时 LWJGL (OpenGL) 中的视觉伪影

java - 使用 lambda 表达式计算偶数的平方

java - 使用 try 和 catch 获取输入

java - 文本到语音 android 在 Activity 可见时输出语音

java - 从父类(super class)获取所有数据(this =)