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

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

ただいまの
回答率

88.91%

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 226

ppppapddp

score 1

前提・実現したいこと

画面に出てきているボタンを押すと出力するようにしたいです。
ここに質問の内容を詳しく書いてください。
現在、自学で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;
    }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • キャンセル

  • キャンセル

  • ppppapddp

    2020/07/19 01:19

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

    キャンセル

  • TN8001

    2020/07/20 17: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人とも同じ課題に取り組んでいるということでしょうか??

    (申し上げにくいのですがあまりにもひどいコードなので)とても課題とは思えず、同一人物の投稿かと思ったのですがそうではないのですね?

    キャンセル

回答 1

checkベストアンサー

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/19 10:36

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

    キャンセル

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

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る