如何在Frame里头加上图片作为背景,高手请进,在线等! 如何在Frame里头加上图片作为背景,高手请进,在线等! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://blog.csdn.net/jia20003/article/details/6663801这里也许你可以看看 你用这个JPanel放在窗体最底层作为底层容器就好了import java.awt.Graphics;import java.awt.Image;import javax.swing.JPanel;@SuppressWarnings("serial")public class JImagePane extends JPanel { /** * 背景图片 */ private Image image = null; /** * 是否自适应 */ private boolean autoResize = false; /** * 构造方法 */ public JImagePane() { this(null, false); } /** * 构造方法 * @param image - 图片 */ public JImagePane(Image image) { this(image, false); } /** * 构造方法 * @param image - 图片 * @param autoResize - 是否自适应 */ public JImagePane(Image image, boolean autoResize) { super(); this.autoResize = autoResize; this.image = image; repaint(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (image != null) { if (autoResize) { g.drawImage(image, 0, 0, getWidth(), getHeight(), null); } else { g.drawImage(image, 0, 0, null); } } } /** * 返回背景图片 * @return */ public Image getImage() { return image; } /** * 设置背景图片 * @param image - 背景图片 */ public void setImage(Image image) { this.image = image; repaint(); } /** * 返回图片是否自适应 * @return */ public boolean isAutoResize() { return autoResize; } /** * 设置图片是否自适应 * @param autoResize */ public void setAutoResize(boolean autoResize) { this.autoResize = autoResize; repaint(); }} 必须用JPanel ,Frame不能设置背景图片吗? JFrame 是一个 Component,而不是 JComponent所以,它没有实现双缓冲它没有 paintComponent 方法如果你去重写他的 paint 方法,你会发现很难让你画的图片作为背景图片存在要不就是图片挡住了控件,要不就是图片完全看不到而根据 Swing 规范,每一个 JFrame 应该都有一个 JPanel 作为底层容器其他所有的控件都应该添加在这个 JPanel 上最后,setContentPane(panel) 就好了 动态显示图片 如何将字符串倒序输出? 在一个包里定义两个JavaBean却报错了 java执行程序与C语言的不同之外? 猴子爬山 JAVA里面有用到win32API吗? JFileChooser的addChoosableFileFilter(FileFilter fileFilter)方法应该怎么用啊?! jBuild 做一个可以给其他机子发消息的小程序,怎么做呀? 为什么我用必须在*.class文件路径下,才能用java命令运行*.class? java程序运行完以后,windows20000假死,怎么回事? 对话框打开后,如何设置背景窗口的激活状态? 向数据库插入数据时主键和外键的问题
这里也许你可以看看
import java.awt.Image;import javax.swing.JPanel;@SuppressWarnings("serial")
public class JImagePane extends JPanel {
/**
* 背景图片
*/
private Image image = null;
/**
* 是否自适应
*/
private boolean autoResize = false;
/**
* 构造方法
*/
public JImagePane() {
this(null, false);
} /**
* 构造方法
* @param image - 图片
*/
public JImagePane(Image image) {
this(image, false);
}
/**
* 构造方法
* @param image - 图片
* @param autoResize - 是否自适应
*/
public JImagePane(Image image, boolean autoResize) {
super();
this.autoResize = autoResize;
this.image = image;
repaint();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
if (autoResize) {
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
} else {
g.drawImage(image, 0, 0, null);
}
}
} /**
* 返回背景图片
* @return
*/
public Image getImage() {
return image;
} /**
* 设置背景图片
* @param image - 背景图片
*/
public void setImage(Image image) {
this.image = image;
repaint();
} /**
* 返回图片是否自适应
* @return
*/
public boolean isAutoResize() {
return autoResize;
} /**
* 设置图片是否自适应
* @param autoResize
*/
public void setAutoResize(boolean autoResize) {
this.autoResize = autoResize;
repaint();
}
}
所以,它没有实现双缓冲
它没有 paintComponent 方法
如果你去重写他的 paint 方法,
你会发现很难让你画的图片作为背景图片存在
要不就是图片挡住了控件,要不就是图片完全看不到而根据 Swing 规范,
每一个 JFrame 应该都有一个 JPanel 作为底层容器
其他所有的控件都应该添加在这个 JPanel 上
最后,setContentPane(panel) 就好了