(База GUI, Java) Как сделать видимым движение шара по панели, привязав старт к нажатию кнопки?
int x = 70; // координаты для шара
int y = 70;
MyDrawPanel drawPanel;
public static void main(String[] args) {
SimpleAnimation gui = new SimpleAnimation();
gui.go();
}
public void go() {
JFrame frame = new JFrame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
drawPanel = new MyDrawPanel();
frame.getContentPane().add(BorderLayout.CENTER, drawPanel);
JButton button = new JButton("Запустить шарик");
frame.getContentPane().add(BorderLayout.SOUTH, button);
button.addActionListener(new ButtonListener2());
frame.setSize(400, 400);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
class MyDrawPanel extends JPanel {
public void paintComponent(Graphics g) {
g.setColor(Color.white);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(Color.gray);
g.fillOval(x, y, 100, 100);
}
}
class ButtonListener2 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
((JButton) e.getSource()).setText("Шарик запущен!");
// Если вставлять метод таким образом, то видно только конечное положение шара, но не его перемещение по панели
moveBall();
}
}
private void moveBall() {
// Перемещение шара по панели
for (int i = 0; i < 180; i++) {
x++;
y++;
drawPanel.repaint();
try {
Thread.sleep(5);
} catch (Exception exc) {
}
}
}
}
Ответы (1 шт):
Автор решения: Олексій Моренець
→ Ссылка
class ButtonListener2 implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
((JButton) e.getSource()).setText("Шарик запущен!");
new Thread(() -> moveBall()).start();
}
}