我试过在applet 中的Component的构造函数中调用 getSize().x和getSize().y返回的是0我是想得到Component 的大小、
 class DrawPanel
      extends JPanel {
    boolean isGetFlag = false;
    BufferedImage offScreen, bi;    DrawPanel() {
      m_nXLeft = getLocation().x;
      m_nYTop = getLocation().y;
      m_nXRight = m_nXLeft + getSize().width;
      m_nYBottom = m_nYTop + getSize().height;    }如果不是在构造函数中取得实际大小 那在什么时机取才可以得到 Component 的实际大小???

解决方案 »

  1.   

    构造的时候你还没有设置尺寸的大小当然是0了况且你继承的这个面板类根本没有重写paint或paintCompoent事件
        protected void paintComponent ( Graphics g )
        {        super.paintComponent ( g ) ;
            int height = this.getHeight () ;
            int width = this.getWidth () ;
            g.drawRect ( 0 , 0 , width - 1 , height - 1 ) ;    }
      

  2.   

    大家的意思是说  在paint或paintCompoent事件之后    或者是在setSzie()之后
     就可以有效去用了吗?如果我在构造的时候设置大小  是不是要与网页applet大小保持某种一致才有效?paint取用的话不好吧  是不是每次repaint 都要取我的需求是 panel 每次大小都会变动 变动后需要取用panel的大小用作计算如果是自己写函数 什么时候 setSize 什么时候 getSize大家能不能 帮我出出主意!!!
      

  3.   

    setSzie最终要靠paint或paintCompoent来画的呀
    方法一:你可以在构造的时候传入面板尺寸的参数来初始大小(这种方法我觉得没必要)
    DrawPanel(int w,int h) 
    然后paint方法里改成
            super.paint ( g ) ;
            g.drawRect ( 0 , 0 , w , h ) ;方法二:直接在外部设置面板的大小
    在外部new DrawPanel后
    用setsize来设置大小paint里直接写成
            super.paint( g ) ;
            int height = this.getHeight () ;
            int width = this.getWidth () ;
            g.drawRect ( 0 , 0 , width - 1 , height - 1 ) ;
    就ok方法三:通过自写属性接口来改变,觉得完全没必要,你要改变直接调用setsize就可以了干吗要自己写,所以这里不写了paint取用的话不好吧  是不是每次repaint 都要取我的需求是 panel 每次大小都会变动 变动后需要取用panel的大小用作计算这两句证明你的理解有错误,并不是说尺寸大小要靠调用paint来取,而是尺寸大小的改变要通过paint方法在界面上体现出来
    也就是说你执行setsize的时候会自动去执行paint来改变界面上该面板的尺寸大小的
      

  4.   

    也就是说你执行setsize的时候会自动去执行paint来改变界面上该面板的尺寸大小的 
    或者  在SET之后 调用repaint() 我在set 之后 paint 之前 可以用 get取到大小吗?