从重绘JPanel停止JScrollPane

时间:2017-09-14 10:48:31

标签: java jpanel jscrollpane redraw

我有一个带有JScrollPane的JPanel,它的问题在于,当我使用JScrollPane时,会调用JPanels重绘方法。我想禁用它,因为我的JPanel在适当的时候自己重绘。

我想要它所以它只更新了paint方法的getClipBounds(),但是我们调用了paint方法。

1 个答案:

答案 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();
}