-2

我的意思是功能,对不起!

使用下面的代码,它有几个做不同工作的类。问题是,既然他们从不互相打电话,他们按什么顺序运行?

它们同时运行吗?

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

public class Moving extends JPanel implements ActionListener {
    int x, y;
    Timer timer;

    Moving() {
        x = 0;
        y = 0;
        timer = new Timer(10, this);
    }

    public void actionPerformed(ActionEvent e) {
        x += 1;
        y += 1;
        repaint();
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (x > 1080 && y > 880) {
            x = 0;
            y = 0;
        } else {
            g.fillOval(x, y, 40, 40);
        }
    }

    public static void main(String[] args) {
        JFrame f = new JFrame("Moving");
        f.setBackground(Color.GREEN);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Moving m = new Moving();
        f.add(m);
        f.setSize(1100, 900);
        f.setVisible(true);
        m.timer.start();
    }
}
4

2 回答 2

1

我假设您的意思是方法,而不是类。此外,操作的顺序取决于您调用它们的顺序,也就是main方法。在您的示例中,您仅调用Moving构造函数,因此这是您的类中将执行的唯一“方法”。其他的已定义,但不会运行,因为它们没有被调用(至少在您提供的代码中没有)。

更新(感谢 dacwe 和 cHao):对不起,我不熟悉 JPanel,也不知道在此类之外调用的方法。在这种情况下,该repaint()方法将间接调用paintComponent(),同时 Timer 将触发对actionPerformed的调用。 这篇文章在更详细地解释它方面做得很好。

另外,作为注释——Java 通常调用它的“动词”方法。部分是大多数 OO 语言的约定,部分是因为该函数与一个类相关联,所以它值得这种区别。Javascript,一种函数式语言,将其动词称为“函数”。

于 2012-05-12T22:54:11.727 回答
0

您的程序按以下顺序执行:

  1. main入口点
  2. Moving建造者
  3. Timer构造函数
  4. Timer.start()Timer类的方法
  5. Moving.actionPerformed(ActionEvent e)每 10 毫秒调用一次
于 2012-05-12T23:00:28.610 回答