Как сразу нарисовать мой холст, переопределив метод paint () в AWR J2SE 5.0 - PullRequest
0 голосов
/ 26 марта 2019

Я создаю игру Connect 4 с использованием Java в процессе изучения языка.

Я сделал небольшую ячейку Connect 4, которая в основном представляет собой продолжение холста, где я закрашиваю каждый пиксель в синий или прозрачный цвет, если он находится в радиусе диска.

Проблема с моим кодом заключается в том, что ячейка не окрашивается сразу, я вижу, как все пиксели окрашиваются один за другим, образуя мою ячейку примерно через 6-7 секунд.

Я хотел бы нарисовать такую ​​ячейку, чтобы разместить ее в сетке и сформировать мою сетку Connect 4.

Что я делаю не так?

Пытался искать решения в интернете, но пока не нашел. Я не могу использовать SWING.

package Puis4;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;

public class Vue_Cellule_Grille extends Canvas {
    // Attributs
    int width;
    int height;

    // Constructeur
    public Vue_Cellule_Grille() {

    }

    public Vue_Cellule_Grille(int width, int height) {
        this.width = width;
        this.height = height;
    }

    // Methodes

    public void paint(Graphics g) {
        // TODO : Afficher lorsque c'est peint.

        int width = this.getWidth();
        int height = this.getHeight();
        int centreX = width/2;
        int centreY = height/2;
        Double diametre = this.getWidth() * 0.80;
        Double rayon = diametre/2;

        for (int i = 0; i < width; i++) {
            for (int j = 0; j < height; j++) {
                    Double distance = Math.sqrt(Math.pow(centreX-i, 2.0) + Math.pow(centreY-j, 2.0));
                    if (distance > rayon) {
                        g.setColor(Color.BLUE);
                    } else {
                        // Le constructeur prends les valeurs RGB en float et pas en double. 
                        g.setColor(new Color((float) 1.0,(float) 1.0, (float) 1.0, (float) 0.5));
                    }

                    g.fillRect(i, j, 1, 1);
                }
            }
        }
    }
package Puis4;

import java.awt.Frame;
import java.awt.LayoutManager;

public class Vue_Plateau extends Frame {
    // Main de Test

    public Vue_Plateau() {
        super("Cellule Grille du Plateau");
        this.setBounds(600, 600, 300, 300);
        this.addWindowListener(new Controlleur_Fermer_Plateau(this));

        // Layout & composants
            Vue_Cellule_Grille v = new Vue_Cellule_Grille();
            this.add(v);

        this.setVisible(true);
    }

}
package Puis4;

public class Test {

    public static void main(String[] args) {
        new Vue_Plateau();
    }
}

Мне бы хотелось, чтобы мой расширенный холст рисовался точно так же, как я это делал в методе рисования, как только я его вызываю, чтобы поместить его в GridLayout или любой LayoutManager.

1 Ответ

0 голосов
/ 26 марта 2019

У вас должно быть что-то, что говорит AWT, что графический интерфейс нужно перекрасить. Я не могу сказать вам, где это сделать, поскольку вы показали нам только фрагмент вашего кода.

...