解决方案 »

  1.   

    你为什么需要重写 paint ?一般来说重写类似  paintComponent 就好了。改写 paint 要做的事情会更多,因为对于 JFrame 这种 Window (窗体)类型的组件来说,它需要与操作系统打交道,告诉操作系统哪个面积下是自己管理的,鼠标点击这个面积之内的区域会由我来响应,在这个面积之外由操作系统通知其它的程序来响应,还有最大化和最小化之类的处理。比如,我们想做一个主程序是圆形的时候我们就需要考虑到这些(另外还需要给 jframe.setShape 来达到圆形的效果)。一般来说当我们通过程序往容器型组件中添加组件时,可以考虑 invalidate, reinvaliate 和validate 这些方法调用之后 (具体调用哪个我也忘记别人怎么说的)再 repaint 就好了。它的原理就是,当程序调用 repaint 后它会检测是否真的有东西变了,然后就重新计算孩子组件的 layout 尺寸位置等然后重画,如果没有任何改变它就不做处理(比如你按一下向下的方向键就希望它移动却没有通过代码改变它的位置只是 repaint 它就不会真的动了,需要我们明确地告诉 Swing 它确实有东西变了,应该重画)
      

  2.   


    额...多谢了,不过如果不重写paint方法貌似没办法改变JFrame的形状好像