gpt4 book ai didi

java - 我看不到圆圈在移动

转载 作者:行者123 更新时间:2023-12-01 17:55:12 26 4
gpt4 key购买 nike

在java中使用Swing时,我试图在单击按钮时将圆从起始位置缓慢移动到结束位置。但是,我看不到圆圈在移动。它只是在一瞬间从开始移动到结束。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyApp {

private int x = 10;
private int y = 10;
private JFrame f;
private MyDraw m;
private JButton b;

public void go() {
f = new JFrame("Moving circle");
b = new JButton("click me to move circle");
m = new MyDraw();
f.add(BorderLayout.SOUTH, b);

f.add(BorderLayout.CENTER, m);
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);

b.addActionListener(new Bute());
}

public static void main(String[] args) {
MyApp m = new MyApp();
m.go();
}

private class Bute implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < 150; i++) {
++x;
++y;
m.repaint();
Thread.sleep(50);
}
}
}

private class MyDraw extends JPanel {
@Override
public void paintComponent(Graphics g) {
g.setColor(Color.white);
g.fillRect(0, 0, 500, 500);
g.setColor(Color.red);
g.fillOval(x, y, 40, 40);
}
}
}

我认为问题出在 Action 监听器上,因为当我在不使用按钮的情况下执行此操作时,它正在工作。有什么建议吗?

最佳答案

正如安德鲁·汤普森所说,调用Thread.sleep()如果不定义第二个线程就会卡住一切,因此解决方案是定义并运行另一个线程,如下所示:

class Bute implements ActionListener, Runnable {
//let class implement Runnable interface
Thread t; // define 2nd thread

public void actionPerformed(ActionEvent e) {

t = new Thread(this); //start a new thread
t.start();
}

@Override //override our thread's run() method to do what we want
public void run() { //this is after some java-internal init stuff called by start()
//b.setEnabled(false);
for (int i = 0; i < 150; i++) {
x++;
y++;
m.repaint();
try {
Thread.sleep(50); //let the 2nd thread sleep
} catch (InterruptedException iEx) {
iEx.printStackTrace();
}
}
//b.setEnabled(true);
}

}

此解决方案的唯一问题是多次按下按钮会加快循环速度,但这可以通过 b.setEnabled(true/false) 在动画期间使按钮不可点击来解决。 。不是最好的解决方案,但它有效。

关于java - 我看不到圆圈在移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45610774/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com