質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Q&A

解決済

1回答

2833閲覧

ボタンを押しても反応しないです

ppppapddp

総合スコア1

Java

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

0グッド

0クリップ

投稿2020/07/18 14:39

編集2020/07/18 16:16

前提・実現したいこと

画面に出てきているボタンを押すと出力するようにしたいです。
ここに質問の内容を詳しく書いてください。
現在、自学でjavaをやっています。今回、最終的にボタンを押すとボールがその方向に加速するというプログラムを作ろうと思っています。ですが途中でボタンを押しても反応しなくなりました。なぜなのかわからないので教えていただきたいです
Sample.javaでコンパイルするとボタンが反応しないです

■■な機能を実装中に以下のエラーメッセージが発生しました。

該当のソースコード

java
ソースコード

//Sample.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Sample19rd158 extends JPanel implements ActionListener{ static int xPanelSize; static int yPanelSize; double x,y,r,vx,vy,ax,ay; BallPropagator b1; BallPropagator b2; Color c1; Color c2; static JButton btn1 = new JButton("↑"); static JButton btn2 = new JButton("↓"); static JButton btn3 = new JButton("→"); static JButton btn4 = new JButton("←"); Sample(int xPanelSize, int yPanelSize){ this.xPanelSize = xPanelSize; this.yPanelSize = yPanelSize; b1 = new BallPropagator(10, 100, 100, 30, 40, 0, 9.8); b2 = new BallPropagator(10, 10, 100, 50, 20, 0, 9.8); ///////////////////////////////////////////// c1=Color.black; c2=Color.blue; ///////////////////////////////////////////// btn1.addActionListener(this); btn1.setBounds(100,100,50,100); btn2.addActionListener(this); btn2.setBounds(100,50,50,100); btn3.addActionListener(this); btn3.setBounds(0,100,100,100); btn4.addActionListener(this); btn4.setBounds(200,100,100,100); } public void dctionPerformed(ActionEvent e){ b1.xUpdate(); b1.yUpdate(); b1.vxUpdate(); b1.vyUpdate(); b2.xUpdate(); b2.yUpdate(); b2.vxUpdate(); b2.vyUpdate(); repaint(); } public void actionPerformed(ActionEvent e){ JButton selectedButton = (JButton)e.getSource(); if(selectedButton==btn1){ System.out.println("up"); }else if(selectedButton==btn2){ System.out.println("down"); }else if(selectedButton==btn3){ System.out.println("left"); }else{ System.out.println("right"); } } public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(c1); g.fillOval((int)(b1.a(x) - b1.c(r)), (int)(b1.b(y) - b1.c(r)), (int)(2*b1.c(r)), (int)(2*b1.c(r))); g.setColor(c2); g.fillOval((int)(b2.a(x) - b2.c(r)), (int)(b2.b(y) - b2.c(r)), (int)(2*b2.c(r)), (int)(2*b2.c(r))); } public static void main(String[] args) { BallPropagator.dt=0.1; JFrame frame = new JFrame(); BallMain panel = new BallMain(500,400); panel.setBackground(Color.white); panel.setPreferredSize(new Dimension(xPanelSize,yPanelSize)); panel.add(btn1); panel.add(btn2); panel.add(btn3); panel.add(btn4); BallPropagator.xmin = 0; BallPropagator.xmax = panel.xPanelSize; BallPropagator.ymin = 0; BallPropagator.ymax = panel.yPanelSize; frame.add(panel); frame.pack(); // frame.setTitle("反射するボール"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //frame.setResizable(true); frame.setVisible(true); Timer timer = new Timer(10, panel); timer.start(); } }
//BallMain.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class BallMain extends JPanel implements ActionListener{ static int xPanelSize; static int yPanelSize; double x,y,r,vx,vy,ax,ay; BallPropagator b1; BallPropagator b2; Color c1; Color c2; BallMain (int xPanelSize, int yPanelSize){ this.xPanelSize = xPanelSize; this.yPanelSize = yPanelSize; b1 = new BallPropagator (10, 100, 100, 30, 40, 0, 9.8); b2 = new BallPropagator (10, 10, 100, 50, 20, 0, 9.8); c1=Color.black; c2=Color.blue; } public void actionPerformed(ActionEvent e){ b1.xUpdate(); b1.yUpdate(); b1.vxUpdate(); b1.vyUpdate(); b2.xUpdate(); b2.yUpdate(); b2.vxUpdate(); b2.vyUpdate(); repaint(); } public void paintComponent(Graphics g){ super.paintComponent(g); g.setColor(c1); g.fillOval((int)(b1.a(x) - b1.c(r)), (int)(b1.b(y) - b1.c(r)), (int)(2*b1.c(r)), (int)(2*b1.c(r))); g.setColor(c2); g.fillOval((int)(b2.a(x) - b2.c(r)), (int)(b2.b(y) - b2.c(r)), (int)(2*b2.c(r)), (int)(2*b2.c(r))); } }
//BallPropagator.java public class BallPropagator_19rd158{ public static double dt; public static int xmin; public static int xmax; public static int ymin; public static int ymax; private double r; private double x, y; private double vx, vy; private double ax, ay; double p=0.8; BallPropagator(double r,double x,double y,double vx,double vy,double ax,double ay){ this.r=r; this.x=x; this.y=y; this.vx=vx; this.vy=vy; this.ax=ax; this.ay=ay; } public void xUpdate() { this.x = this.x + this.vx * dt; if(this.x < (double)xmin+this.r ){ this.vx *= -p; this.x = (double)xmin+this.r; }else if((double)xmax-this.r < x ){ this.vx *= -p; this.x = (double)xmax-this.r; } } public void yUpdate() { this.y = this.y + this.vy * dt; if(this.y < (double)ymin + this.r ){ this.vy *= -p; this.y = (double)ymin+this.r; }else if((double)ymax-this.r < this.y ){ this.vy *= -p; this.y = (double)ymax-this.r; } } public void vxUpdate(){ this.vx=this.ax*dt+this.vx; } public void vyUpdate(){ this.vy=this.ay*dt+this.vy; } public double a(double x){ return x=this.x; } public double b(double x){ return x=this.y; } public double c(double x){ return x=this.r; } }

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

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

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

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

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

ppppapddp

2020/07/18 16:19

変更しました。 よろしくお願いします
TN8001

2020/07/20 08:44

[Java - ボタンを押しても反応しないです|teratail](https://teratail.com/questions/278736 [Java - ボタンを押すと速度が加算されるものを作りたい|teratail](https://teratail.com/questions/278819 [Java - javaの関数が反応しない|teratail](https://teratail.com/questions/279029 3つとも同じコードに見えます。 これは3人とも同じ課題に取り組んでいるということでしょうか?? (申し上げにくいのですがあまりにもひどいコードなので)とても課題とは思えず、同一人物の投稿かと思ったのですがそうではないのですね?
guest

回答1

0

ベストアンサー

public class Sample19rd158 extends JPanel implements ActionListener{

Sample(int xPanelSize, int yPanelSize){
とが食い違っていてコンパイルエラーになるので、
public class Sample extends JPanel implements ActionListener{
としました。

public class BallPropagator_19rd158{

BallPropagator(double r,double x,double y,double vx,double vy,double ax,double ay){
も同様で、_19rd158 を削除しました。

Sampleクラスを new していないので、コンストラクタ Sample が呼び出されず、
btn1.addActionListener(this); などが実行されません。

public static void main(String[] args) {
の中に Sample sample = new Sample(640, 480); を追加したら、
ボタンに反応しました。

投稿2020/07/18 18:10

kazuma-s

総合スコア8224

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

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

ppppapddp

2020/07/19 01:36

コンストラクタsampleを呼び出すものがなかったから反応しなかったんですね。理解することができました。ありがとうございます。これからも精進していきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問