在学习语言的过程中,我正在使用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方法中一样进行绘制。
答案 0 :(得分:0)
您必须具有告诉AWT必须重新绘制GUI的内容。 我无法告诉您在哪里执行此操作,因为您只向我们展示了一部分代码。