どのように同じサイズのグリッドでキャンバスをペイントしますか? 問題:http://tinypic.com/r/idvc0j/5 コードは、他のセルと平行でないサイズの最後のセルを描画します。 paint()メソッドでどのような変更を行う必要がありますか?キャンバス内のグリッド、最後のセルのサイズが他のものと同じではありません
import java.awt.*;
import javax.swing.*;
public class Grid extends Canvas{
Cell[][] maze;
int rows;
int cols;
Grid(int rows, int cols) {
this.rows = rows;
this.cols = cols;
maze = new Cell[rows][cols];
}
public static void main(String[] args){
JFrame f = new JFrame("Sample");
Grid x = new Grid(25,25);
f.add(x);
f.pack();
f.setVisible(true);
f.setSize(600,600);
f.setResizable(false);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g) {
int k;
int width = getSize().width;
int height = getSize().height;
int htOfRow = height/(rows);
for (k = 0; k < rows; k++)
g.drawLine(0, k * htOfRow , width, k * htOfRow);
int wdOfRow = width/(cols);
for (k = 0; k < cols; k++)
g.drawLine(k*wdOfRow , 0, k*wdOfRow , height);
}
}
class Cell {
// private final static int NORTH = 0;
// private final static int EAST = 1;
// private final static int WEST = 2;
// private final static int SOUTH = 3;
// private final static int NO = 0;
// private final static int START = 1;
// private final static int END = 2;
// boolean[] wall = new boolean[4];
// boolean[] border = new boolean[4];
// boolean[] backtrack = new boolean[4];
// boolean[] solution = new boolean[4];
// private boolean isVisited = false;
// private boolean isCurrent = false;
// private int Key = 0;
//
// public Cell(){
// for(int i=0;i<4;i++){wall[i] = true;}
// }
// public void setStart(int i){Key = i;}
// public int getKey(){return Key;}
// public boolean checkVisit(){return isVisited;}
// public void stepIn(){
// isCurrent = true;
// isVisited = true;
// }
// public void stepOut(){isCurrent = false;}
}
とされていても26x26になりましたいいえ、私が編集した私の前のコメントを無視してください、これは動作します。丸めがプログラムに影響を与えているとは思わなかった。私が思った別の解決策は、キャンバスを読み込むJFrameのサイズを606 x 628にすることです。側面の境界線はそれぞれ3 px、上下は28 pxです。 –
[OK]を、私は私の全体の固定テストコードを掲載しました。あなたがちょうどその逐語をコピーして実行すると、あなたは何を見ますか? – ulmangt
は行です 長方形rect = this.getBounds(); は本当に必要ですか?あなたはそれを使わなかったように見えます。私がコンパイルしたとき、同じ結果が得られます。 –