前提・実現したいこと
画面に出てきているボタンを押すと出力するようにしたいです。
ここに質問の内容を詳しく書いてください。
現在、自学で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; } }
https://teratail.com/tour
変更しました。
よろしくお願いします
[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件
あなたの回答
tips
プレビュー