如何在JPanel上固定位置绘图?
我将 JPanel 包裹在 JScrollPane 中,并且希望矩形始终绘制在同一位置 = 使用滚动条移动不会影响矩形的可见性。
我尝试了以下代码:
public void paintComponent(Graphics g) {
g.setColor(Color.red);
g.drawRect(50, (int)getVisibleRect().getY(), 20 , 20);
}
但它仅在整个 JPanel 的大小更改时重新绘制矩形。
I have JPanel wrapped in JScrollPane and I want the rectangle to be drawn always on the same position = moving with scrollbars wont affect the visibility of the rectangle.
I tried following code:
public void paintComponent(Graphics g) {
g.setColor(Color.red);
g.drawRect(50, (int)getVisibleRect().getY(), 20 , 20);
}
but it only repaints the rectangle when size of whole JPanel is changed.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
IIRC,JScrollPane 会尝试最小化滚动时的重绘量,因此它不会总是导致组件更新。
标准技术是使用
JLayeredPane
。将JScrollPane
添加到下层,并在其上方添加一个透明玻璃面板组件。请参阅如何在 Swing 中使用分层窗格教程。IIRC,
JScrollPane
will try to minimise the amount of redrawing done scrolling, so it wont always cause your component to be updated.The standard technique is to use a
JLayeredPane
. Add youJScrollPane
to a lower layer, and a non-opaque glass panel component above it. See How to Use a Layered Pane in the Swing tutorial.也许是这样的:
Maybe something like this:
尝试 setLocation 方法。访问 setLocation 了解更多信息。
Try
setLocation
method. Visit setLocation for more info.