高分求教一个怪异的问题

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)干了什么坏事,真相不明,注释掉这句也没事了

来源:英超直播

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值