2017-08-04 32 views
0

我有一个JPanel,我把组件它。每当子组件(甚至是嵌套)被重新绘制时,我都需要得到通知。是否有一个事件可以在组件添加到JPanel时注册?如何检测JPanel子组件绘画事件?

我的目的是在JPanel的右边和下边画一个滚动条,但是当重新绘制子组件时,它重叠滚动条并使滚动条的一部分不可见。我想在组件刷新视图时重新绘制滚动条,以便它保留在滚动条的后面。

为了使它一点点清晰,这两个是用户界面的屏幕截图。

When components overlay the scroll bar When scroll bar overlays the components

第一个图像是不正确,但这种情况只有当我将鼠标悬停鼠标的组件。否则,它看起来不错。右侧的图像是容器加载时的图像。我希望组件总是出现在滚动条的后面,但我无法检测到特定组件是否重新绘制。

+0

,你可以添加一个'ComponentListener'看到http://docs.oracle.com/javase/7/docs/api/java/awt/event/ComponentListener.html - 这个监听器会通知时组件已调整大小,隐藏/显示und移动 –

+0

@MartinFrank True Martin。但重新粉刷不属于任何这些事件。我尝试过使用它。 – OmerHalit

+0

你的组件如何不在滚动窗格的视图端口内? –

回答

0

对于那些谁遇到类似的问题,这样,

我发现内摆动自己的绘画机制答案。如果你想从一个容器的孩子收到组分漆事件,覆盖isPaintingOrigin()方法。

@Override 
protected boolean isPaintingOrigin() { 
    return true; 
} 

只有这样才足够,绘画事件将被底层容器调用。