まずは初心者です。私はPiece
の配列を使ってパズルゲームを作ろうとしています。各Piece
は1から9の数字を表します。paintComponent(Graphics g)
を使用してペイントしようとしていますが、repaint()
メソッドを呼び出すと何も起こりません。エラーはないので、私が気付いていない点があるはずです。repaint()を呼び出すと何も塗装されないのはなぜですか?
私はNetBeansを使用しています。私は新しいデスクトップアプリケーションを作成し、JPanel
とJButton
を追加しました。
これは私のコードです:
public class PuzzleGame2View extends FrameView {
public Piece pieces[][];
Drawing outer = new Drawing();
public PuzzleGame2View(SingleFrameApplication app) {
super(app);
initComponents();
//more code that netbeans automatically wrote......
public class Drawing extends JFrame implements MouseListener{
public void paintComponent(Graphics g){
g = jPanel1.getGraphics();
super.paintComponents(g);
for (int i = 0; i < pieces.length; i++) {
for (int j = 0; j < pieces.length; j++) {
if (pieces[i][j].getText()!=null) {
g.setColor(Color.red);
g.fillRect(i*100, j*100, 100, 100);
g.setColor(Color.BLACK);
g.drawString(pieces[i][j].getText(), i*100 + 50, j*100 + 20);
}
}
}
}
public void makePieces(){
pieces = new Piece[3][3];
for (int i = 0; i < pieces.length; i++) {
for (int j = 0; j < pieces.length; j++) {
if (i == 2 && j == 2){
pieces[i][j] = new Piece(j, j, null);
}
else
pieces[i][j] = new Piece(j, j, "" + (i*3+j+1));
}
}
}
私はボタンをクリックしたときにrepaint()
メソッドを呼び出すようにしようとしています。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
makePieces();
outer.repaint();
}
はここのクラスPiece
:
package puzzlegame2;
public class Piece {
private int row,count;
private String text;
public Piece(int row, int count, String text) {
this.row = row;
this.count = count;
this.text = text;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
それはちょうど最初のステップです。やるべきことがたくさんある。しかし、public void paintComponent(Graphics g)
とrepaint()
の仕組みを完全に理解するまでは続行できません。
だから、助けていただければ幸いです。
線g = jPanel1.getGraphicsを再描画
revalidate()
電話をしてみてください。 public void paintComponent(Graphics g) 何も試していないのにうまくいきませんでした。 – Max問題を実証し、コードを再発行できる最小の実行可能プログラムを作成することをお勧めします。 – willcodejavaforfood
「パブリックvoid paintComponent(Graphics g)」と「repaint()」がどのように機能するかを完全に理解するまでは、私は続行できません。多くの人がそれを混乱させようとします。 – Pops