前提・実現したいこと
ここに質問の内容を詳しく書いてください。
プログラミング、Java初心者です。UFOをマウスで動かして敵(星雲)をクリックすると点数、何もないところをクリックした場合は空振りした回数を表示するようにしたいのですが、テキストフィールドの中身が初期値のまま変わりません。
点数と空振りした回数を初期値の0から更新してテキストフィールドの中身を変えるにはどうすればよいかアドバイスをよろしくお願いいたします。
ふんわりとした質問で申し訳ありません。
発生している問題・エラーメッセージ
テキストフィールドの中身が変わらない
該当のソースコード
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class ThingDraw2 extends JFrame{
String imageNames[]= {"ufo.png","explode1.png","explode2.png",
"kaniseiun.png","catseye.png","mazeran.png"};//星雲とUFOのイメージ
static JTextField scoredisp; //点数と空振り回数表示用のテキストフィールド
static int hitscore=0; //星雲(敵)にヒットした際の点数を入れる変数
static int wavtimes=0; //何もないところをクリックした回数を入れる変数
public ThingDraw2(String title) { super(title); setSize(650,650); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationByPlatform(true); setLayout(new BorderLayout()); Image im[]; im=new Image[imageNames.length]; for(int i=0;i<im.length;i++) { im[i]=new ImageIcon(imageNames[i]).getImage(); } ThingPanel2 panel=new ThingPanel2(im,this); scoredisp=new JTextField("点数="+hitscore+",空振り回数="+wavtimes); add(scoredisp,BorderLayout.NORTH); add(panel,BorderLayout.CENTER); } public static void main(String args[]) { ThingDraw2 frame=new ThingDraw2("クラスを派生させる"); frame.setVisible(true); } //Thingを拡張してNeburaクラスを作る(別ファイルにしておいたほうがいい)
class ThingPanel2 extends JPanel implements MouseMotionListener,MouseListener{
int width=650,height=650;
//int hitscore=0,wavtimes=0;
Image image[];
//JTextField scoredisp;
JFrame frame;
public Thing ufo;
Thing enemy;
Thing blowup[];
ThingPanel2(Image im[],JFrame fr){ super(); image=im; frame=fr; //パネルの大きさをセット setMinimumSize(new Dimension(width,height)); setPreferredSize(new Dimension(width,height)); addMouseMotionListener(this); addMouseListener(this); setBackground(Color.black); ufo=new Thing(image[0],this); enemy=new Nebura(image[3],this); blowup=new Thing[100]; //scoredisp=new JTextField("点数="+hitscore+"空振り回数="+wavtimes); //scoredisp.setBounds(0, 0, 180, 30); }
/----------以下テキストフィールドの中身を変えるためのメソッド---------/
public void score(int hit,int waving) { //hitはヒット点数、wavingは空振りした回数
hit=ThingDraw2.hitscore;
waving=ThingDraw2.wavtimes;
for(int i=0;i<blowup.length;i++) {
if(blowup[i]==null) {
if(ufo.hit(enemy)) { //hitはboolean型 星雲(敵)をクリックしたとき
hit+=10;
scoredisp.setText("点数="+hit+",空振り回数="+waving);
}else if(ufo.hit(null)) { //何もクリックしなかったとき
waving++;
scoredisp.setText("点数="+hit+",空振り回数="+waving);
}
}
}
}
/----------------------------------------------------------------/
//幅と高さを出す public int getWidth() {return width;} public int getHeight() {return height;} //実際の描画を行うメソッド public void paintComponent(Graphics g) { super.paintComponent(g); //描画のデフォルト動作 //爆発イメージを描画 for(int i=0;i<blowup.length;i++) { if(blowup[i]!=null) { blowup[i].draw(g); } } if(enemy!=null) { enemy.draw(g); } if(ufo!=null) { ufo.draw(g); } } //マウスの移動を検出した時に呼び出されるメソッド public void mouseMoved(MouseEvent e) { if(ufo!=null)ufo.move(e.getX(), e.getY()); //マウス位置にUFOを動かす if(enemy!=null)enemy.move(e.getX(), e.getY()); //敵を動かす※座標値は意味ない frame.repaint(); } //マウスをドラッグしたまま移動した時に呼び出されるメソッド public void mouseDragged(MouseEvent e) {} public void mouseClicked(MouseEvent e) { for(int i=0;i<blowup.length;i++) { if(blowup[i]==null) { if(ufo.hit(enemy)) { blowup[i]=new Thing(image[2],this); blowup[i].setLocation(enemy.getX(),enemy.getY()); enemy=null; }else { blowup[i]=new Thing(image[1],this); blowup[i].setLocation(e.getX(),e.getY()); } frame.repaint(); break; } } } public void mouseEntered(MouseEvent e) { if(enemy==null) { enemy=new Nebura(image[3],this); } if(ufo==null) { ufo=new Thing(image[0],this); ufo.move(e.getX(), e.getY()); } frame.getIgnoreRepaint(); } public void mouseExited(MouseEvent e) { ufo=null; frame.repaint(); } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {}
}
}
###試したこと
敵をクリックしたときの点数と空振り回数の変数をグローバル変数にしてみましたが、変わりませんでした。
補足情報(FW/ツールのバージョンなど)
特にありません