2012-04-13 20 views
1

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

そう
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); 
    } 
} 
+0

1) 'paint()'メソッドは呼び出されません。確認するには、@Override表記を使用します。 2)*「フレームの内容をイメージとして保存する」* a)フレームではなくアプレットです。 b)デフォルトでアプレットはファイルを保存できません。 3)アプレットは、アプリケーションよりも開発とデバッグの方がはるかに複雑です。 4)最後の最後と最後の最後の '}'の前に空白行が15行あったのはなぜですか? –

答えて

1

[OK]を、

  1. あなたは地獄は、このやっていることpublic void paint()を持っ笑?あなたはグラフィックスオブジェクトが必要です。 public void paint(Graphics g)は、アプレットの初期化時に自動的に呼び出されるデフォルトのメソッドに似ています。

  2. あなたのデフォルトグラフィックスグラムオブジェクトを使用するので、Graphics2D g2d = (Graphics2D) g;

  3. あなたはダブルバッファリングにはほとんどの詳細は、あまりにも:)

  4. を検索するようにGraphics2Dオブジェクトにそれをキャストする必要があるときは、 Graphics2D g = img.createGraphics();を持っています

とにかく...このコードは、あなたが、私はRunnableを実装する方法を:)

PS注欲しいもの、それから取る動作します。 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(); 
     } 
    } 
} 


}