1

まず第一に、私は初心者です。s の配列を使用してパズル ゲームを作成しようとしていPieceます。それぞれPieceが 1 から 9 までの数字を表していpaintComponent(Graphics g)ますrepaint()。エラーはありませんので、私が気づいていない点があるはずです。

NetBeans を使用しています。新しいデスクトップ アプリケーションを作成し、 と を追加しましJPanelJButton

これは私のコードです:

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()働き方を完全に理解するまで先には進めません。

ですから、助けていただければ幸いです。

4

2 に答える 2

2

paint()の代わりにメソッドをオーバーライドしてみてくださいpaintComponents()repaint()にコールを送信しますpaint()

編集: いずれにしても変更する必要があることの 1 つは、のpaintComponent()メソッドをオーバーライドしているという事実ですJFrame。代わりに、このメソッドをオーバーライドしてJPanelから、新しいパネルを JFrame のコンテンツ パネルとして設定する必要があります。そしてrepaint()、パネルを呼び出します。

于 2011-02-08T12:34:36.117 に答える
1

revalidate()再描画する前に呼び出してみる

于 2011-02-08T13:31:37.983 に答える