JAVA图形界面,怎么让背景图片正好充满JFrame?

JPanel里是一张背景图片,然后把JLabel放在JFrame的正中央,并且充满整个JFrame,应该怎么写?
现在是这样的,应该怎么改?
import java.awt.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) {
JFrame mainframe = new JFrame("五子棋");
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel cp = (JPanel)mainframe.getContentPane();
cp.setLayout(new BorderLayout());
cp.add("Center",new mypanel());
mainframe.pack();
mainframe.setVisible(true);
}
}
class mypanel extends JPanel {
ImageIcon background = new ImageIcon("D:\\java documents\\Gobang\\棋盘.jpg");
public void paintComponent(Graphics g) {
g.drawImage(background.getImage(), 0, 0, this);
super.paintComponents(g);
}
}

最简单的方法:
JFrame mainframe = new JFrame("五子棋");
mainframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel cp = (JPanel) mainframe.getContentPane();
cp.setLayout(new BorderLayout());
ImageIcon background = new ImageIcon("D:\\java documents\\Gobang\\棋盘.jpg");
JLabel label=new JLabel(background);
cp.add("Center", label);
mainframe.pack();
mainframe.setVisible(true);
不管用哪种方法,由于窗口有最小大小限制(主要是要显示标题栏上的按钮,所以如果设置成不要按钮,就可以不用本限制,但Jframe不好办,需要用其他类型的窗口),所以如果图片过窄的话,两边会显示空白。追问

按你说的方法成功实现了,谢谢
但是请问我那样写为什么不行呢?是哪一句的问题?
.pack()不是能够让父类窗口适应子类吗

追答

你那样写的话,由于mypanel 的内容是直接画出来的,他不知道画出来的内容具体有多大。非要用你的方式的话,就要根据图片大小为mypanel 设置尺寸。但JLabel 就能自动画,我们又何必多此一举呢?

另外,我的方式能够支持动画的,你自己那样画的话,是不行的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-27
获取容器的宽和高,然后设置图片的宽和高
第2个回答  2015-04-27
g.drawImage(background.getImage(), 0, 0,getWidth(),getHeight(), this);
相似回答