如何通过覆盖AWR J2SE 5.0

时间:2019-03-26 13:46:57

标签: java canvas awt drawing

在学习语言的过程中,我正在使用Java创建一个Connect 4游戏。

我做了一个连接4的小单元,它基本上是Canvas的扩展,在其中我将每个像素都涂成蓝色或透明颜色(如果它在磁盘半径内)。

我的代码有一个问题,就是单元无法立即绘制,我可以看到所有像素在大约6到7秒后被逐一着色,从而形成了单元。

我想绘制一个这样的单元格,以将其放置在网格布局中并形成连接4网格。

我在做什么错了?

试图在Internet上搜索解决方案,但到目前为止尚未找到。我不能使用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中后,就像在paint方法中一样进行绘制。

1 个答案:

答案 0 :(得分:0)

您必须具有告诉AWT必须重新绘制GUI的内容。 我无法告诉您在哪里执行此操作,因为您只向我们展示了一部分代码。