🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JFrame

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

2回答

1128閲覧

[Java]マウスのクリックに応じてテキストフィールドの中身を更新したい

popnapopoco

総合スコア4

JFrame

JFrameはJFC/Swingフレームワークのコンポーネントであり、トップレベルのコンテナです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2019/11/10 14:15

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
プログラミング、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/ツールのバージョンなど)

特にありません

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/11/10 14:50

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
jimbe

2019/11/10 15:56

使用している Thing や Nebura というクラスもご提示願えますか.
guest

回答2

0

解決しました。回答ありがとうございました。情報不足申し訳ございませんでした。

投稿2019/11/11 03:46

popnapopoco

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/11/11 03:54

ベストアンサーを選択することで「解決済み」となります. また, このサイトは, 後進のために情報を蓄積する目的があります. popnapopoco さんと同じ状況に陥った方がこのご質問を見た時に解決できるよう, どうすることで解決したのかを具体的にご記述ください.
guest

0

まず score メソッドの呼び出しがありません.

そして, ThingPanel2 は ThingDraw2 の非 static な内部クラスですので, ThingPanel2 内部に同名の変数がなければ, ThingDraw2 のフィールドを直接使用できると思います.

java

1 private JTextField scoredisp; //点数と空振り回数表示用のテキストフィールド 2 private int hitscore=0; //星雲(敵)にヒットした際の点数を入れる変数 3 private int wavtimes=0; //何もないところをクリックした回数を入れる変数

java

1public void score() { 2 for(int i=0;i<blowup.length;i++) { 3 if(blowup[i]==null) { 4 if(ufo.hit(enemy)) { //hitはboolean型 星雲(敵)をクリックしたとき 5 hitscore+=10; 6 scoredisp.setText("点数="+hitscore+",空振り回数="+wavtimes); 7 }else if(ufo.hit(null)) { //何もクリックしなかったとき 8 wavtimes++; 9 scoredisp.setText("点数="+hitscore+",空振り回数="+wavtimes); 10 } 11 } 12 } 13}

投稿2019/11/10 17:22

jimbe

総合スコア13202

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問