JavaのCanvasで描画したいのですが、何をしているのかわからないため、動作しません。これが私の簡単なコードです。
import javax.swing.JFrame;
import Java.awt.Canvas;
import Java.awt.Graphics;
import Java.awt.Color;
public class Program
{
public static void main(String[] args)
{
JFrame frmMain = new JFrame();
frmMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmMain.setSize(400, 400);
Canvas cnvs = new Canvas();
cnvs.setSize(400, 400);
frmMain.add(cnvs);
frmMain.setVisible(true);
Graphics g = cnvs.getGraphics();
g.setColor(new Color(255, 0, 0));
g.drawString("Hello", 200, 200);
}
}
ウィンドウに何も表示されません。
Canvasは紙で、Graphicsは私の鉛筆だと思うのは間違っていますか?それはどのように機能しますか?
提案:
getGraphics()
を呼び出してGraphicsオブジェクトを取得しないでください。paintComponent()
メソッドで描画します。主要なチュートリアルリンク:
CanvasのPaint(Graphics g)
メソッドをオーバーライドして、そこで描画を実行する必要があります。 Paint()のドキュメントを参照してください。
述べているように、デフォルトの操作はキャンバスをクリアすることであるため、キャンバスのグラフィックスオブジェクトへの呼び出しは期待どおりに実行されません。
最初の方法が機能しないのはなぜですか。 Canvasオブジェクトが作成され、サイズが設定され、グラフィックが設定されます。私はいつもこれを奇妙に感じます。また、クラスがJComponentを拡張する場合は、オーバーライドできます
_paintComponent(){
super...
}
_
そして、あなたは別のクラス内でクラスのインスタンスを作成し、それからただNewlycreateinstanceOfAnyClass.repaint();
を呼び出すことができるべきではありません
私はこれまで取り組んできたいくつかのゲームプログラミングでこのアプローチを試しましたが、本来あるべきだと思うように動作しないようです。
ダグ・ハウフ
以下が動作するはずです:
public static void main(String[] args)
{
final String title = "Test Window";
final int width = 1200;
final int height = width / 16 * 9;
//Creating the frame.
JFrame frame = new JFrame(title);
frame.setSize(width, height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);
//Creating the canvas.
Canvas canvas = new Canvas();
canvas.setSize(width, height);
canvas.setBackground(Color.BLACK);
canvas.setVisible(true);
canvas.setFocusable(false);
//Putting it all together.
frame.add(canvas);
canvas.createBufferStrategy(3);
boolean running = true;
BufferStrategy bufferStrategy;
Graphics graphics;
while (running) {
bufferStrategy = canvas.getBufferStrategy();
graphics = bufferStrategy.getDrawGraphics();
graphics.clearRect(0, 0, width, height);
graphics.setColor(Color.GREEN);
graphics.drawString("This is some text placed in the top left corner.", 5, 15);
bufferStrategy.show();
graphics.dispose();
}
}