我创建了一个applet,它有一个大面板来显示由几个控件(按钮,文本字段等)包围的数据。大面板包含几层标签,我自己渲染。
控件都有与之关联的工具提示,其中一些工具提示与主面板重叠。当它们消失时,它们会在主面板图像上留下一个洞,直到主面板重新绘制。
现在请注意,这并不总是发生。它仅在光标处于特定范围内时发生。如果你足够远要么向左或向右(无差异注意到沿Y轴的变化),当提示消失的孔画了。
我在工具提示和重新粉刷应该如何工作并不精通,如果这是一个迹象,表明有什么东西可怕错了我的计划,但如果我可以只调用重绘主面板上时,工具提示消失,我应该没事。我可以在工具提示中覆盖一些事情来实现这一目标吗?
我正在使用Swing
感谢。
答案 0 :(得分:1)
回答你的问题(在你通过评论找到解决方案之后):Swing内置了一些非常复杂的重绘管理。当工具提示消失时,它下面的矩形被重新绘制。
现在,哪些组件必须重新粉刷?所有那些与给定矩形重叠,并且本身不被其他组件隐藏(在所讨论的区域中)的人 - 但这里只计算不透明的组件。 (这就是我们需要JComponent上的opaque
属性的全部原因 - 以优化重新绘制。)
你的标签声明自己是不透明的,但并没有真正在paintComponent
上绘制它的整个区域,而且标签应该覆盖的工具提示的区域仍未上漆。
声明您的标签部分透明也会导致其背后组件的相关区域被重新绘制。