Я относительно новичок в java, я пытаюсь сделать анимацию, которая при запуске шара должна неуклонно перемещаться вокруг охватывающего прямоугольника, отскакивая от краев. Когда нажата кнопка STOP, движение должно замерзнуть, и, наконец, при нажатии кнопки GO она должна возобновиться.Отскок шара вокруг краев с помощью прослушивателя действий
Это код, который я произвел до сих пор:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Ellipse2D;
// Does the drawing
class MyDrawing extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g.setColor(Color.red);
Ellipse2D.Double circle = new Ellipse2D.Double(300,120,50,50);
g2.draw(circle);
g2.fill(circle);
Rectangle box1 = new Rectangle(10, 10, 380, 300);
g.setColor(Color.BLACK);
g2.draw(box1);
}
}
//Produces window plus everything inside it
public class ControlledBall extends JFrame {
JButton flash = new JButton("Go");
JButton steady = new JButton("Stop");
JPanel panel = new JPanel(new GridBagLayout());
MyDrawing drawing = new MyDrawing();
Timer timer;
public ControlledBall(){
panel.add(flash);
panel.add(steady);
this.add(panel,BorderLayout.SOUTH);
this.add(drawing,BorderLayout.CENTER);
steady.addActionListener(new SteadyListener());
flash.addActionListener(new MoveListener());
timer = new Timer(500, new MoveListener());
timer.start();
}
class MoveListener implements ActionListener{
public void actionPerformed(ActionEvent event){
timer.start();
move();
}
}
//Stuck what to implement here
class SteadyListener implements ActionListener{
public void actionPerformed(ActionEvent event){
}
}
public static void main(String[] args) {
JFrame window = new ControlledBall();
window.setSize(400,400);
window.setTitle("Controlled Ball");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
public void move() {
long delay = 40;}
private int x = 1;
private int y = 1;
private int dx = 3;
private int dy = 2;{
int dia = 30;
Color color = Color.red;
if(x + dx < 0 || x + dia + dx > getWidth()) {
dx *= -1;
color = Color.red;
}
if(y + dy < 0 || y + dia + dy > getHeight()) {
dy *= -1;
color = Color.red;
}
x += dx;
y += dy;
}
}
Когда я запустить программу, это мой выход, но ничего не происходит:
ваш метод шаг не установлен какой-либо из координат вашего шара. единственными переменными, получающими множество, являются 'x, y, dx, dy', которые являются только локальными переменными функции перемещения. – chiliNUT