日期:2014-05-20  浏览次数:20633 次

JButton的问题
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class JavaWuZiQiFrame extends JFrame {

Image backScreen = null;

Thread t = new Thread(new Runner());
//背景图片
ImageIcon bg = new ImageIcon("C:\\Users\\Forever\\Desktop\\javaProgram\\javaWuZiQi\\Background.jpg");


JButton bStart = new JButton("开始游戏");
JButton bExit = new JButton("退出");
JButton bAbout = new JButton("关于");
JavaWuZiQiFrame() {

super("五子棋");
setLayout(null);

bStart.setBounds(650,150,100,40);
bAbout.setBounds(650,200,100,40);
bExit.setBounds(650,500,100,40);
add(bStart);
add(bAbout);
add(bExit);
setVisible(true);
this.getContentPane().setBackground(Color.red);
setResizable(false);
setBounds(50,50,bg.getIconWidth() + 200,bg.getIconHeight());
/*
bAbout.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
t.start();
}
});
*/
bExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//t.start();
}
public void paint(Graphics g) {
Image im = Toolkit.getDefaultToolkit().getImage("C:\\Users\\Forever\\Desktop\\javaProgram\\javaWuZiQi\\Background.jpg");
g.setColor(new Color(249,214,91));
//g.fillRect(0,0,bg.getIconWidth() + 200,bg.getIconHeight());
g.drawImage(im,0,0,null);
g.setColor(Color.red);

}

public void update(Graphics g) {

if(backScreen == null) {
//创建一幅用于双缓冲的、可在屏幕外绘制的图像
backScreen = this.createImage(bg.getIconWidth() + 200,bg.getIconHeight());
}
Graphics gBackScreen = backScreen.getGraphics();
Color c = gBackScreen.getColor();
gBackScreen.setColor(Color.BLACK);
gBackScreen.fillRect(0,0,bg.getIconWidth() + 200,bg.getIconHeight());
paint(gBackScreen);
g.drawImage(backScreen,0,0,null);
gBackScreen.setColor(c);
}
private class Runner implements Runnable {
public void run() {
while(true) {
repaint();
try {
Thread.sleep(200);

} catch(Exception e) {

}
}
}
}

}



启动程序之后,按钮没有自动出现,只有当鼠标指在按钮的位置时才出现,为什么?,还有,我如何在背景图片之后在设置一个背景色?
JButton

------解决方案--------------------
1. 继承JPanel 重写 paintComponent。
2. Toolkit的getImage方法是异步的。使用ImageIO的read方法。
3. 使用javax.swing.Timer定时重绘。
------解决方案--------------------
你要分清楚先画谁,他是先画控件再调用paint方法,这样那就会出现控件看不到,只有你把鼠标放上去才能显示他,你试试从最小化到能看见,他也是不会显示的。楼上说的方法就能解决了,他的顺序是先调用paintComponent。画控件。设置背景颜色我觉得你还是得通过画笔去画,这样更靠谱点