我必須編寫一個簡單的Java應用程序,它可以加載圖片,以GUI形式顯示它,允許用戶應用一些轉換,並顯示轉換後的圖片。 我的解決辦法工作正常,但用戶界面閃爍了一下,因爲調用過於頻繁重繪方法(例如,當縮放用JSlider的圖像用戶)Java Swing - 閃爍畫布圖形
我的代碼如下所示:
public class ImageCanvas extends Canvas
{
private BufferedImage image;
// ...
@Override
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
if(image != null)
{
// I draw out the image...
}
}
public void setImage(BufferedImage image)
{
this.image = image;
this.repaint();
}
public void setRotation(double rotation)
{
this.rotation = rotation;
this.repaint();
}
public void setScale(double scaleX, double scaleY)
{
//set the scaling field, then repaint ....
}
// and so on...
}
而且,當然,我的主UI上有一個ImageCanvas控件,我只需調用重繪畫布區域的公共方法(請參閱上面的「setRotation」方法)。我知道這是一個簡單的問題,但我甚至沒有在畫布上找到DoubleBuffered屬性...
任何幫助表示讚賞。
沒有JCanvas ...我應該使用JPanel嗎? – asdfghjkl
@asdfghjkl:是的,JPanel並重載'paintComponent',而不是'paint'。上面的答案被編輯修正。 –
好的,它適用於JPanel。我不知道,如果這可能是Swing的「最佳實踐」,或者它是黑客,但謝謝。 – asdfghjkl