2016-08-03 90 views
2

我一直在做一段时间的项目。我正在制作一张纸牌甲板课,我最终会用它来制作我自己的纸牌游戏。我决定使用图像作为卡片的索引,而不是让java绘制它们。我在Illustrator中绘制了自己的套装,并将它们保存为具有透明背景的PNG。我可以在我的程序中显示图像,但是当我将图像添加到我的JFrame时,背景颜色消失,导致我相信由于某种原因,透明度不被保留。我尝试了两种不同的方法将图像添加到我的GUI中,并且两次都有相同的结果。我试过的一种方法是这里建议的方法How to add an image to a JPanel? 和我试过的另一种方法是这里建议的方法How can I display a BufferedImage in a JFrame? 这两种方法都不是我正在寻找的。我希望我的西装能够在屏幕上显示,并能够看到背景。如何在png图片中保持透明背景

这里是当前的代码,我想正常工作,我意识到它编译和运行得很好,但我希望能够仍然能够看到背景。

import java.io.File; 
import java.io.IOException; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

import javax.imageio.ImageIO; 



public class ImageReadTest extends JPanel{ 
    public static void main(String[] args){ 
     //Just a simple test on reading pictures into a java file and drawing them 
     //onto a JFrame 
     System.out.println("Java Image Read Test"); 
     JFrame frame = new JFrame("Image Reader"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setBackground(Color.green); 

     frame.add(new ImageReadTest()); 
     frame.pack(); 
     frame.setSize(250,250); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private BufferedImage image; 
    public ImageReadTest(){ 
     try{ 
     image = ImageIO.read(new File("Club.png")); 
     } catch(IOException e){ 
     System.out.println("Error"); 
     } 
    } 
    @Override 
    protected void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     g.drawImage(image, 90, 90, null); 
    } 
}//end class ImageReadTest 

这是我测试我的代码的图片,感谢您花时间阅读和帮助! Club

+1

我不是图像专家,但我怀疑你必须将图像类型设置为'BufferedImage.TYPE_INT_ARGB',以便看到alpha通道。您可能无法使用'ImageIO.read(File)'提供的默认值。如果事实证明这是问题,那么问题是http://stackoverflow.com/q/4694153/18157,我发现了一个简单的谷歌搜索“java jgrame PNG透明度” –

+0

@Jim Garrison什么他在您提供的问题中所做的工作是创建一个带有图像的JLabel作为存储在标签中的图像图标。我想避免使用这种方法。我在发布这个问题之前尝试了它,它显示图像但没有透明度。在你提供的问题中,OP表示透明部分以黑色显示,而我不是这种情况。此外,我还没有与BufferedImage.TYPE_INT_ARGB合作过,并且提供的问题没有给出太多关于如何使用这个枚举的例子,假设它是一个枚举。 –

回答

1

问题不在于获取图像。该程序给你正确的结果,即图像的背景是透明的。但是你的ImageReadTest JPanel的颜色和你的jFrameContentPane是一样的。因为你无法检测到这种差异。

只需更换以下行

frame.setBackground(Color.green); 

有了这个

frame.getContentPane.setBackground(Color.green); 

一点需要明白的是,有您的JPanel并JFrame中之间多了一个层,这是contentPane中。

编辑: 因为你想让你自己的窗格透明,你将不得不使其不透明为false。为此,请在构造函数中添加以下行。

setOpaque(false); 
+0

这没有奏效。我尝试添加该行来代替frame.setBackground(Color.green);正如你所建议的那样,但仍然变得灰色背景。在我没有运气的情况下将图片添加到屏幕后,我也尝试将其放置。但是,您的答案确实使我更好地理解内容窗格是什么。也许我错过了其他可能很明显的东西? –

+0

setOpaque(false);是所需的代码。感谢您的帮助! –

+0

你的意思是'frame.getContentPane。setBackground(Color.green)'不是必需的吗? @Randy_E – afzalex