我有一个带有jscrollpane sor的jpanel,问题是当我使用jscrollpane时,jpanels jpanels redraw methode被调用。我想禁用这一点,因为我的jpanel在适当的时候用自己的自我重新绘制了。
我想要它,所以它只是更新了油漆甲板的getClipBigns(),但请调用涂料。
您无法做到这一点 - 由于视口显示包含的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);
}