[英]Stop JScrollPane from redraw JPanel
我有一个JPanel及其周围的JScrollPane,问题是当我使用JScrollPane时,会调用JPanels重绘方法。 我想禁用它,因为我的JPanel会在适当的时候自行重绘。
我想要它,所以它只更新了paint方法的getClipBounds(),而无需调用paint方法。
您不能这样做-由于视口显示所包含的JPanel的不同部分,具体取决于滚动条的位置,实际上必须重新显示必须重新绘制的区域,并且以前可能没有绘制过。
由于JScrollPane
不知道所包含的Component
是如何实现的,以及它是否重绘整个区域还是仅重绘需要重绘的区域,因此它强制所包含的Component
在滚动时重绘自身。
但是,您可以将要显示的内容呈现为位图,然后在paintComponent(Graphics)
方法中绘制位图。 因此,您可以有效地缓冲绘制的内容,并可以在需要时随时启动对缓冲位图的更新。
为了绘制到位图上,可以执行以下操作:
BufferedImage buffer; // this is an instance variable
private void updateBuffer(){
// Assuming this happens in a subclass of JPanel, where you can access
// getWidth() and getHeight()
buffer=new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g=buffer.getGraphics();
// Draw into the graphic context g...
g.dispose();
}
然后,在您的JPanel中,重写paintComponent方法:
public void paintComponent(Graphics g){
g.drawImage(buffer, 0, 0, this);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.