这是我的代码:
public class Circles extends JApplet{
public void paint(Graphics g) {
Scanner in = new Scanner(System.in);
Random rand = new Random();
int position = rand.nextInt(200);
System.out.println(position);
}
}
,输出结果为:
199
152
发生的事情是在打印出“位置”变量之后,它会跳回并重新开始。我无法弄清楚为什么会这样做。
答案 0 :(得分:4)
正如MadProgrammer所说,你正在尝试绘制一个JApplet,它不仅没有绘制方法,而且是一个顶级容器,如JFrame和JDialog。您不想绘制到顶级容器。将它放在JPanel或某个较低级别的容器中,允许您覆盖paintComponent方法。
你不想把它放在你的paint方法中。另外,如果你正在使用Swing(你是,那就是名字前面带有J的那个),请使用paintComponent
方法。
并确保使用super.paintComponent(g);
作为paintComponent
方法的第一行调用paintComponent的原始父方法。
所以它看起来像:
public void paintComponent(Graphics g) {
super.paintComponent(g);
//anything else you want goes here
//don't get in the habit of creating Objects in here
//and don't do anything that's not event-driven
}
除了在重写的paintComponent方法中绘制东西之外,不要放任何东西。你永远不应该将用户输入放入其中并避免创建对象,因为不仅可能有更好的方法来创建对象,创建对象可能会花费大量时间,这对于快速重复调用的方法来说会很糟糕继承。
您无法控制何时重新绘制应用程序。 paintComponent/paint
方法是连续调用的,您的设计应该基于此。
将GUI设计为事件驱动的,而不是顺序的。