高分求教一个怪异的问题

来源:互联网 发布:php artisan 命令 编辑:程序博客网 时间:2024/05/16 09:29

RectangleE类代码

Java code
import javax.swing.*;import java.awt.*;class RectangleE extends JFrame{ private int height=0,width=0;//declare fields; public RectangleE(){ }//constructor; public void setHeight(int h){ height=h; } public void setWidth(int w){ width=w; } public int calculateArea(){ return height*width; } @Override public void paint(Graphics g){ int s=0; for(int i=60;i<=500;i++){ g.clearRect(i-1, 50, width, height);//清除前面的矩形; //g.drawRect(i,50, width, height); s=(i-60)%6;//用此产生6种情况以改变颜色; switch (s){//选择颜色; case 0: g.setColor(Color.red); break; case 1: g.setColor(Color.BLUE); break; case 2: g.setColor(Color.PINK); break; case 3: g.setColor(Color.ORANGE); break; case 4: g.setColor(Color.GRAY); break; case 5: g.setColor(Color.MAGENTA); break; } g.fillRect(i, 50, width, height); try{ Thread.sleep(1); } catch(Exception e){ System.out.println("wenti"); }//为什么此处用wait()方法不管用? } } public void draw(){ //this.setForeground(Color.blue); this.setBackground(Color.yellow);//设置背景; this.setSize(600,500);//设置窗口大小; this.setVisible(true);//可见; this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口,关闭程序; this.setResizable(false);//禁止改变窗口大小; repaint(); }}


执行时,矩形从左向右会有时候走三遍,有时候走两遍,很怪异啊,我明明只让它运行一遍的,各位麻烦帮忙看一下
这是为什么????

这个样子问题就解决了。
应该是JVM在加载这个RectangleE这个类的时候,自动调了一次paint(), new出来的时候又调了一次,
有时候你draw的时候在rapaint的一次。
加上static后一开就加载了他,而且指引的只有一个对象,在paint一次后就不在paint的了
以上都是我个人意见,你自己再看看。加上static是不是OK了。
我测试了是OK了

楼主把setVisible(true)移到main方法里面去就搞定了,原因暂时没想明白,不过setVisible(true)一般要放在初始化的最后为好,不然的话不知道会出现什么样的状况。

额 楼主的这个问题在楼主的第一个帖子里就看到了 么想明白

调试的过程中还有时候paint()调用了3-5遍呢 - - 十分头大

等达人解答 顺便帮顶

要不楼主试下把setVisible(true)后面的repaint()去掉,或者把setVisible(true)后面所有的语句去掉,反正我电脑上是每次都只会画一次了,楼上有3-5遍的我只能抱以诧异的目光。

恩 去掉这个少了一次 但是把setVisible(true)移到main方法里面不管用啊

调了一下,似乎setResizable(false)干了什么坏事,真相不明,注释掉这句也没事了

来源:英超直播