メモ的な何か

技術的な私のメモになる予定です。

追記:Javaでオブジェクト指向とリバーシ作成


Javaでオブジェクト指向とリバーシ作成2 - メモ的な何か
前回で一応リバーシ作成は完結しましたが、残っていたパネルへの表示がうまくいってない(更新がボード部分と同時になっていたため、ボードの描画中にいったん消えてしまうようだった)ことを修正しましたのでメモしておきます。

修正方法は修正前は以下のようになっているところを
  JFrame -- JPanel(ボード表示) -- JLabel(文字表示)

修正後では以下のように修正しました
  JFrame -- JPanel(ボード表示)
      |_ JPanel(文字表示)

パネルで描画処理を行っているので、別々のパネルを用意し単純に描画を分けました。(ラベルからパネルにしたのは応用が利くと思ったので)

記述方法は文字表示用のパネルクラスを用意しました。
ConsolPanel.java

package reversi;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JPanel;

@SuppressWarnings("serial")
public class ConsolPanel extends JPanel {
	private static final int PANEL_WIDTH = 800;
	private static final int PANEL_HEIGHT = 50;

	private String str;

	public ConsolPanel() {
		setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
		setBackground(Color.BLACK);

	}

	public void setString(String str) {
		this.str = str;
	}

	@Override
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.setColor(Color.WHITE);
		if (str != null) {
			g.drawString(str, 10, 20);
		}
	}
}

文字列をセットして描画を呼べば表示されます。
これをフレームでインスタンス化します。

ReversiFrame.java

	public ReversiFrame() {
		setTitle("リバーシ");

		setLayout(new BorderLayout());

		ConsolPanel consolPanel = new ConsolPanel();
		ReversiPanel panel = new ReversiPanel(consolPanel);

		Container contentPane = getContentPane();
		contentPane.add(panel, BorderLayout.NORTH);
		contentPane.add(consolPanel, BorderLayout.SOUTH);

		pack();
	}

こんな感じで2つのパネルの配置とボードのパネルに文字表示用のパネルを渡して、ゲームマスターの文字表示が行えるようにしました。

最終的な画面も貼っておきます(あまり変わってないですがw)
f:id:rui_phone:20140927155228p:plain

ソースはGitHubにPush済みです。
かつjarのアップロードもしました!ダブルクリックで実行できると思います!
先攻黒が自動プレイヤーになってます。(動作確認はJavaSE-1.7で行ってます)

ruihub/java_reversi · GitHub

これにてリバーシは(たぶん)完です!