ページ 11

JAppletゲーム制作にてpaintComponentが呼ばれない

Posted: 2015年4月11日(土) 08:09
by pigmo
JAppletを使ってミニゲームをつくろうと思って、基本的な事を勉強していざコードを書いてみると、次の状況でpaintComponentが呼ばれなくて困っています。
数時間試行錯誤したものの全く進展がなく、挫折しそうになってしまったので、質問させてください。

環境は、OS: Windows 7 IDE: Eclipseです。
知識レベルは、Cが入門書卒業程度、JavaはSwingでミニゲーム(テトリス等)レベルは自作経験有り。Appletに関しては初挑戦です。

プログラムは、JAppletを継承したMainクラスと、JPanelを継承したMainPanelクラスで構成しています。
現状は、MainPanel内でオーバーライドしたpaintComponent()が呼ばれず、アプレットビューアーが真っ白のままになります。
Mainクラス内のループからmainPanel.repaint()を実行しても呼ばれません。

以下がコードです。

Mainクラスがこちらです。

コード:

public class Main extends JApplet {

	// 利用クラスの宣言
	MainPanel mainPanel;
	//GameScene gameScene;
	// 定数
	public static int fps;
	public static int blockSize;
	// 画像ファイル
	public static BufferedImage[] blockImage;
	
	@Override
	public void init() {
		
		// クラス変数の読み込み
		fps = 16;
		blockSize = 24;

		// ブロック画像の配列生成・読み込み
		// TODO
		
	} // init
	
	@Override
	public void start() {
		
		// シーンのインスタンス化
		//gameScene = new GameScene();
		// コンテンツペイン
		Container contentPane = getContentPane();
		// パネル設定
		Dimension panelSize = getSize();
		mainPanel = new MainPanel();
		mainPanel.setSize(panelSize);
		contentPane.add(mainPanel);
		// メインループ
		while(true) {
			System.out.println("MAINLOOP");
			
			// シーン処理
			//gameScene.run();		
			// 描画
			mainPanel.repaint();		
			// FPS管理
			try { Thread.sleep(1000 / Tetris.fps); } catch(InterruptedException e) {}
		}
	} // start
}
MainPanelクラスがこちらです。

コード:

public class MainPanel extends JPanel {

	// ゲームシーンから描画に利用するオブジェクト
	// TODO
		
	@Override
	public void paintComponent(Graphics g) {
		System.out.println("MAINPANEL: paintComponent");
		super.paintComponent(g);

		g.setColor(Color.RED);
		g.drawLine(10,  10, 100, 100);
		
		// ゲーム画面描画
		//drawGame(g);
		
		g.dispose();
	} // paintComponent
}
よろしくお願いします。

Re: JAppletゲーム制作にてpaintComponentが呼ばれない

Posted: 2015年4月11日(土) 11:18
by pigmo
すいません、自己解決しました。
init()で行うべき事をstart()に記述してしまっていたようです。
失礼しました。