解决方案 »

  1.   

    看人家介绍 Swing 的 reinvalidate(), invalidate(), validate(), repaint(), paint() 的区别与调用时刻的介绍,
    如果你改了尺寸相关的东西却不是通过界面鼠标调的(代码调的)或位置,应该通知 Swing invalidate() 去重新计算变化的部分,如果 Swing 在 repaint() 中觉得没有什么变了,它就什么都不做。因为你现在的代码并没有修改这个 JButton 的任何 property,也就没有触发任何 property change 事件,因此 Swing 觉得你好像没改什么东西它也就什么也不做,换个角度,如果你按键之后是通过 myButton.setIcon() 来换个图标或许它就知道有变化了。总之,你可以尝试的是先尝试 validate, invalidate 或 reinvalidate 之后再来 repaint。另外文档还提到了,当我们直接 paint 时绘图的双倍缓冲的效果就忽略了。
      

  2.   

    你把repaint()放到keyRelease事件中去就可以啦,
    就这么容易!