背景简介
我在试着做飞机大战,想用jlabel做一个得分显示。
整个界面用JFrame搭建,两个jpanel,一号Jpanel用paint()画游戏界面,二号Jpanel用来放置jlabel,即用来显示分数。【我方飞机】、【敌机】、【子弹】、【爆炸效果】、【开始】、【画布】共六个类,paint()就在【画布】中,前四个类只有属性器和方法,【画布】里创建我方飞机、敌机和子弹的对象和其移动方法。
这里是正题
- 【爆炸效果】里存在让碰撞后的子弹和敌机消失的方法,在此中需要调用Score值,增加分数。
- 【画布】里的paint()联合repaint()会重复画图,调用【爆炸效果】(每次都是new Bomb(4个参数))。
- 【开始】包含main入口,继承jframe,构造方法里做好基本局部,jpanel和jlabel就是在这里加的。
4.我在【画布】里另创一类GetScore继承jlabel,初始化int Score=0,属性器getter和setter完全正常,打印输出显示分数累加正常。传值到【开始】的一个方法start(int a)中,该方法打印输出同样显示分数值正常。但实际效果却是jlabel一直显示得分: 0.
求教
如何能让jlabel变动,详略均可,谢谢!
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Start extends JFrame{
//这是画布类
Interface in = new Interface();
JPanel jp = new JPanel();
//得分方法类的实例
GetScore jl = new GetScore();
public String getJl() {
return jl.getText();
}
public void setJl(String str) {
jl.setText(str);
}
Start(){
setTitle("飞机大战");
setSize(700, 800);
setBounds(0, 0, 600, 800);
setResizable(false);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
//将显示分数的jlabel添加到面板中
jp.add(jl);
new Thread(in).start();
this.add(in,BorderLayout.CENTER);
jp.setSize(100, 700);
this.add(jp,BorderLayout.WEST);
this.addKeyListener(in);
}
Start(int a){
setJl("得分: "+a);
System.out.println("jl:"+jl.getText());
}
public static void main(String[] args) {
new Start();
}
}