我一直在研究一个项目。我正在建立一个扑克牌套牌,我最终将用它制作我自己的单人纸牌游戏。我决定使用图像作为卡片的索引,而不是让java绘制它们。我在Illustrator中绘制了自己的套装,并将它们保存为具有透明背景的PNG。当我朗读它时,我能够将图像显示在我的程序中,但是当我将图像添加到我的JFrame时,背景颜色消失,导致我相信由于某种原因透明度没有被保留。我尝试了两种不同的方法将图像添加到我的GUI,并且两次都得到相同的结果。我尝试过的一种方法是这里建议的方法How to add an image to a JPanel? 我试过的另一种方法就是这里建议的方法How can I display a BufferedImage in a JFrame? 这两种方法都不是我想要的。我希望我的西装能够在屏幕上显示,并且能够看到背景。
这是我想要正常工作的当前代码,我确实知道它编译并运行得很好,但我希望能够仍然看到背景。
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
答案 0 :(得分:1)
问题不在于获取图像。该程序为您提供正确的结果,即图像的背景是透明的。但是ImageReadTest
JPanel的颜色和ContentPane
的{{1}}颜色相同。因此您无法检测到差异。
只需更换以下行
jFrame
有了这个
frame.setBackground(Color.green);
这里要理解的是,jPanel和jFrame之间还有一层,即ContentPane。
修改: 因为您希望使自己的窗格透明,所以必须将其不透明度设置为false。为此,请在构造函数中添加以下行。
frame.getContentPane.setBackground(Color.green);