分享

swing组件的paint问题_技术专辑

 软件团队头目 2007-09-11
症状一:调用jframe的repaint()方法时为什么不会自动引发paintcomponent()方法?(不过会引发paint()方法)  
   
  症状二:引发paint()方法后,我用drawstring()方法在jframe中画字符串,不能显示,不过改变jframe的大小时会正确显示。    
 
  其实repaint()方法,好像是这样的,如果有paint()方法则调用paint()方法,没有paint()方法  
  而有paintcomponent()方法则调用paintcomponent()方法,下面代码就是为了测试。你可以测试有paint()方法,和注释掉  
  paint()方法两种情况。  
   
   
  import   javax.swing.*;  
  import   java.awt.*;  
  import   java.awt.event.mouseadapter;  
  import   java.awt.event.mouseevent;  
  import   java.awt.graphics2d;  
  public   class   testpanel   extends   jframe   {  
      ttt   panel   =   new   ttt();  
      jpanel   pnlctl   =   new   jpanel();  
      jbutton   button   =   new   jbutton("draw   line");  
      jbutton   button2   =   new   jbutton("clear   all");  
      public   testpanel()   {  
          container   cp   =   this.getcontentpane();  
          cp.add(panel,borderlayout.center);  
          button.addmouselistener(new   mouseadapter(){  
              public   void   mouseclicked(mouseevent   me)  
              {  
                  graphics2d   g2   =   (graphics2d)   panel.getgraphics();  
                  g2.drawrect(20,20,100,300);  
                  panel.repaint();  
                   
              }  
          });  
          button2.addmouselistener(new   mouseadapter(){  
              public   void   mouseclicked(mouseevent   me)  
              {  
                  panel.getgraphics().clearrect(0,0,700,400);  
              }  
          });  
          pnlctl.add(button);  
          pnlctl.add(button2);  
          cp.add(pnlctl,borderlayout.north);  
          setsize(800,600);  
          this.setdefaultcloseoperation(jframe.exit_on_close);  
          this.show();  
      }  
      public   static   void   main(string[]   args)   {  
          testpanel   testpanel   =   new   testpanel();  
      }  
  }  
  class   ttt   extends   jpanel  
  {  
      public   ttt()  
      {  
          super();  
      }  
      public   void   paintcomponent(graphics   g)  
      {  
          joptionpane.showconfirmdialog(null,"paintcomponent()   called");  
          graphics2d   g2   =   (graphics2d)   g;  
          g2.drawline(10,10,300,300);  
      }  
  //如果要试验没有paint()的情况注释掉下面的方法  
      public   void   paint(graphics   g)  
      {  
          joptionpane.showconfirmdialog(null,"paint()   called");  
          graphics2d   g2   =   (graphics2d)   g;  
          g2.drawrect(20,20,300,300);  
      }  
  }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多