在jframe跳转另一个jframe时,弹出的窗口没有显示,也无法操作,关闭都关不了
查了很多资料,觉得可能是paint,repaint的问题,setvisible是会系统调用一次paint吧,那为什么setvisible语句位置不一样都会不能显示呢?调用时间啥的到底是怎么样的
我想实现的就是在这一个jframe里点击一个按钮事件,就创建那个游戏窗口,但是弹出之后没画面,搞了很久,觉得应该是绘制的问题,就打印了缓存区的图片,果然在点击事件的时候缓冲区图片为空,但这是为什么呢,要怎么解决呀,我搞了好几天都搞不定
怕图片看不清,就放一下游戏类的构造方法和重写的paint方法
this.setSize(800,600);//窗口大小
this .setLocationRelativeTo(null);//窗口居中
this.setVisible(true);//窗口可见(此时会调用一次paint方法)
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//关闭窗口
this.setResizable(false);//窗口大小不可变
this.addKeyListener(this);//添加键盘监听
this.setTitle("Super-Mary-P2");//设置窗口名字
System.out.println("Super-Mary-P2 is staring...");
//初始化图片
StaticValue.init();
//初始化马里奥
mario = new Mario(10,355);
mario2 = new Mario2(15,355);
//创建场景(创建好三个场景放到集合里)
for (int i = 1; i <=3 ; i++) {
allBg.add(new BackGround(i,i == 3 ? true :false));
}
//当前场景为
nowBg = allBg.get(0);//取场景集合里的第一个初始化为第一关)
mario.setBackGround(nowBg);
mario2.setBackGround(nowBg);
repaint();//再次调用paint方法
//System.out.println(11111);
System.out.println(offScreenImage);
thread.start();
sendthread.start();
recthread.start();
try {
new Music();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JavaLayerException e) {
e.printStackTrace();
}
@Override
public void paint(Graphics g) {
//System.out.println(22222);
if(offScreenImage == null){
offScreenImage = createImage(800,600);
}
//用Graphics graphics对象绘制在缓冲区
Graphics graphics = offScreenImage.getGraphics();
graphics.fillRect(0,0,800,600);
graphics.drawImage(nowBg.getBgImage(),0,0,this);//绘制在缓冲区
//paint enemy
for (Enemy e:nowBg.getEnemyList()) {
graphics.drawImage(e.getShow(),e.getX(),e.getY(),this);
}
//paint obstacle
for (Obstacle ob: nowBg.getObstacleList()) {
graphics.drawImage(ob.getShow(),ob.getX(),ob.getY(),this);
}
//
graphics.drawImage(nowBg.getTower(),620,270,this);
//
graphics.drawImage(nowBg.getGan(),500,220,this);
//
graphics.drawImage(mario.getShow(),mario.getX(),mario.getY(),this);
graphics.drawImage(mario2.getShow(),mario2.getX(),mario2.getY(),this);
//add score
Color c = graphics.getColor();
graphics.setColor(Color.BLACK);
graphics.setFont(new Font("黑体",Font.BOLD,25));
graphics.drawString("P2当前的分数为:"+ mario.getScore(),300,100);
graphics.drawString("P1当前的分数为:"+ mario2.getScore(),300,150);
graphics.setColor(c);
//用paint方法的形参Graphics g通过offScreenImage绘制到窗口
//System.out.println(333333);
g.drawImage(offScreenImage,0,0,this);