ピクチャをロードしたり、GUI形式で表示したり、変換を適用したり、変形した画像を表示することができるシンプルなJavaアプリケーションを作成する必要があります。 repaintメソッドは、あまりにも頻繁に呼び出されるので 、私のソリューションが正常に動作しているが、UIが少し点滅している(例えば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で、 'paint'ではなく' paintComponent'をオーバーライドします。上記の回答が修正のために編集されました。 –
これはJPanelで動作します。私はこれがSwingの "ベストプラクティス"になるか、それともハックだとは分かりませんが、感謝しています。 – asdfghjkl