1

graphics2Dを使用したいのですが、グラフィックを表示することができません。repaint()を使用できるようにするためのより良い方法はありますか?最終的には、画像を背景として設定し、その上に描画して、フレームの内容を画像として保存できるようにしたいと考えています。

import java.awt.image.*;
import javax.imageio.ImageIO;
import javax.swing.*;

import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.swing.JApplet;
import java.awt.*;

// assume that the drawing area is 150 by 150
public class test extends JApplet
{
  final int radius = 25;
  int width = 200, height = 200;

 BufferedImage img = new BufferedImage(
   width, height, BufferedImage.TYPE_INT_ARGB);

  public void paint (  )
  { 
    Graphics2D g = img.createGraphics();
    g.setColor( Color.orange );
    g.fillRect( 0, 0, 150, 150 );
    g.setColor( Color.black );

    g.drawOval( (150/2 - radius), (150/2 - radius), radius*2, radius*2 );
   }
}
4

1 に答える 1

2

わかりました、

  1. あなたpublic void paint( )はこれが何をしているのか知っていますか?グラフィックオブジェクトが必要です。public void paint(Graphics g)アプレットが初期化されるときに自動的に呼び出されるデフォルトのメソッドのようなものです。

  2. Graphics2D g = img.createGraphics();デフォルトのGraphicsgオブジェクトを使用して、そのようにGraphics2Dオブジェクトにキャストする必要がある場合があります。Graphics2D g2d = (Graphics2D) g;

  3. ダブルバッファリングについてももう少し情報を検索する必要があります:)

とにかく...このコードは機能するので、あなたが望むものをそこから取り出してください:)

PSRunnableをどのように実装したかに注意してください。Graphics2Dコードのみを使用する場合は、これを行う必要はありません。クラスをスレッドにしているだけで、ゲームのフレームレートに使用されます:)

これがお役に立てば幸いです。

import java.applet.*;
import java.awt.*;


public class Test extends Applet implements Runnable{

public boolean isRunning = false;
public int radius = 25;


public void start() {
    isRunning = true;
    new Thread(this).start();
}

public void stop() {
    isRunning = false;
}

public void paint(Graphics g) {
    //Create Graphics2D object, cast g as a Graphics2D
    Graphics2D g2d = (Graphics2D) g;
    g2d.setColor(Color.ORANGE);
    g2d.fillRect(0, 0, 150, 150);

    g2d.setColor(Color.BLACK);
    g2d.drawOval((150/2 - radius), (150/2 - radius), radius * 2, radius * 2);
}

public void run() {

    while (isRunning) {
        repaint();
        try {
            Thread.sleep(17);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


}
于 2012-11-27T12:10:40.143 に答える