import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * IgoTextPanel クラスは、テキスト描画の碁盤を提供します。 * @author Jiro Suzuki */ public class IgoTextPanel extends IgoPanel{ private static final int FONTSIZE=31; private static final int BANSIZEX=630; private static final int BANSIZEY=615; private static final int BOX=32; private static final int ROSU=19; private static final Font CONSTFONT=new Font("Serif",Font.PLAIN,FONTSIZE); private static final Color CONSTCOLOR=new Color(255,255,255); private IgoModel controller; private IntBoard intBoard; private TextBoard textBoard; private char[][] currentBoard; private Image image; private Graphics g_image; private boolean isPutable; /** * 石が置かれていない碁盤のインスタンスを生成します。 */ IgoTextPanel(){ intBoard=new IntBoard(); textBoard=new TextBoard(); isPutable=false; setOpaque(true); addMouseListener(new MouseAdapter(){ public void mousePressed(MouseEvent me){ if(isPutable){ boolean isOnBoardRow=false; boolean isOnBoardCol=false; int x=me.getX(); int y=me.getY(); int minX,minY,row,col; for(row=0;row<ROSU;row++){ minY=row*BOX+11; if(y>=minY && y<minY+BOX){ isOnBoardRow=true; break; } } for(col=0;col<ROSU;col++){ minX=col*BOX+11; if(x>=minX && x<minX+BOX){ isOnBoardCol=true; break; } } if(isOnBoardRow && isOnBoardCol){ controller.putStone(row,col); } } } }); } /** * テキスト描画の碁盤を描画します。 * @param g 保護対象の Graphics オブジェクト */ public void paintComponent(Graphics g){ super.paintComponent(g); currentBoard=textBoard.getTextBoard(intBoard); image=createImage(BANSIZEX,BANSIZEY); g_image=image.getGraphics(); g_image.setColor(CONSTCOLOR); g_image.fillRect(0,0,BANSIZEX,BANSIZEY); g_image.setColor(Color.black); g_image.setFont(CONSTFONT); String line=new String(""); for(int i=0;i<19;i++){ line=new String(currentBoard[i]); g_image.drawString(line,20,i*FONTSIZE+40); } g.drawImage(image,0,0,this); } /** * テキスト描画の碁盤を更新します。 * @param intBoard 碁盤に見立てた行列に、石の色を配置した碁盤データ */ public void update(IntBoard intBoard){ this.intBoard=intBoard; repaint(); } /** * コントローラーを設定します。 * @param controller コントローラー */ public void setIgoGameController(IgoModel controller){ this.controller=controller; isPutable=true; } }