我的图像就像一个中间透明的框架。我想把它作为JPanel的背景图片。我已经这样做但是对于图像的透明部分,白色即将到来。我想删除这种白色,以便此Jpanel下面的组件变得可见。
自定义JPanel的代码是
public class JPanelWithBackground extends JPanel {
private static final long serialVersionUID = 1L;
Image imageOrg = null;
Image image = null;
{
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
int w = JPanelWithBackground.this.getWidth();
int h = JPanelWithBackground.this.getHeight();
image = w>0&&h>0?imageOrg.getScaledInstance(w,h,
java.awt.Image.SCALE_SMOOTH):imageOrg;
JPanelWithBackground.this.repaint();
});
}
public JPanelWithBackground(Image image2) {
imageOrg=image2;
image=image2;
setOpaque(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (image!=null)
g.drawImage(image, 0, 0, null);
}
}
答案 0 :(得分:3)
我的代码没有任何特殊问题。问题可能是您的图像不像您期望的那样透明。
这是一个似乎完美运行的示例(我只是冒昧地修复代码中的小问题):
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class JPanelWithBackground extends JPanel {
private static final long serialVersionUID = 1L;
Image imageOrg = null;
public JPanelWithBackground(Image image2) {
imageOrg = image2;
setOpaque(false);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(imageOrg.getWidth(this), imageOrg.getHeight(this));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (imageOrg != null) {
System.err.println("painting");
g.drawImage(imageOrg, 0, 0, getWidth(), getHeight(), this);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanelWithBackground panel = new JPanelWithBackground(new ImageIcon(new URL(
"http://www.lemondedemario.fr/images/dossier/bowser/bowser.png")).getImage());
JPanel greenPanel = new JPanel(new BorderLayout());
greenPanel.setBackground(Color.GREEN);
greenPanel.add(panel);
frame.add(greenPanel);
frame.pack();
frame.setVisible(true);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}