Почему ничего не нарисовано, когда я вызываю repaint ()? - PullRequest
1 голос
/ 08 февраля 2011

Прежде всего, я новичок. Я пытаюсь сделать игру-головоломку, используя массив Piece s. Каждый Piece представляет число от 1 до 9. Я пытаюсь рисовать, используя paintComponent(Graphics g), но когда я вызываю метод 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().

Так что, пожалуйста, будем благодарны за любую помощь.

Ответы [ 2 ]

2 голосов
/ 08 февраля 2011

Попробуйте переопределить метод paint() вместо paintComponents(). repaint() отправляет вызов на paint().

РЕДАКТИРОВАТЬ: Одна вещь, которую вы должны изменить в любом случае, это то, что вы переопределяете метод paintComponent() вашего JFrame. Вместо этого вы должны переопределить этот метод в JPanel, а затем установить новую панель в качестве панели содержимого JFrame. А затем позвоните repaint() на панели.

1 голос
/ 08 февраля 2011

попробуй revalidate() позвони до перекраски

...