我有一个带有JScrollPane的JPanel,它的问题在于,当我使用JScrollPane时,会调用JPanels重绘方法。我想禁用它,因为我的JPanel在适当的时候自己重绘。
我想要它所以它只更新了paint方法的getClipBounds(),但是我们调用了paint方法。
答案 0 :(得分:0)
你不能这样做 - 因为视口显示所包含的JPanel的不同部分,根据滚动条的位置,必须重新绘制的区域实际上可能是新显示的,可能以前没有被绘制过。
由于lib
不知道所包含的JScrollPane
是如何实现的,以及它是重新绘制整个区域还是仅重新绘制需要重新绘制的区域,因此会强制包含的Component
重绘自身在滚动时。
但是,您可以将要显示的内容呈现为位图,然后在Component
方法中绘制位图。因此,您可以有效地缓冲绘制的内容,并且可以在适合您的情况下启动对缓冲位图的更新。
为了绘制到位图上,您可以这样做:
paintComponent(Graphics)
然后,在JPanel中,重写paintComponent方法:
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();
}