我从事一个项目已有一段时间了。我正在建立一个纸牌组类,最终将用于制作自己的纸牌游戏。我决定使用图像作为卡的索引,而不是用Java绘制它们。我已经在Illustrator中绘制了自己的西装并将其另存为具有透明背景的PNG。当我朗读图像时,可以将其显示在程序中,但是当我将图像添加到JFrame中时,背景色消失了,这使我相信由于某种原因未保持透明性。我尝试了两种将图像添加到GUI的不同方法,两次都得到相同的结果。我尝试过的一种方法是此处建议的方法。如何将图像添加到JPanel?我尝试过的另一种方法是这里建议的方法如何在JFrame中显示BufferedImage?这两种方法都不是我想要的。我希望我的西装能显示在屏幕上,并且仍然能够看到背景。
这是我想要正常工作的当前代码,我确实意识到它可以编译并运行正常,但是我希望仍然能够看到背景。
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
问题不在于获取图像。该程序为您提供正确的结果,即图像的背景是透明的。但是,你的颜色ImageReadTest
的JPanel和ContentPane
你的jFrame
一样。因此,您无法检测到差异。
只需替换以下行
frame.setBackground(Color.green);
有了这个
frame.getContentPane.setBackground(Color.green);
这里要了解的是jPanel和jFrame之间还有一层,即ContentPane。
编辑:因为您要使自己的窗格透明,所以必须将其不透明性设置为false。为此,在构造函数中添加以下行。
setOpaque(false);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句