gpt4 book ai didi

java - java小程序中的paint()无故被调用两次

转载 作者:行者123 更新时间:2023-12-01 19:12:02 27 4
gpt4 key购买 nike

是否有一个常见原因导致 Paint() 方法可能会被无意中调用两次。我有以下代码:

public void paint(Graphics g)
{
//Graphics2D gg;
//gg=(Graphics2D) g;

drawMatrix(g);

}

private void drawMatrix(Graphics g) {

int side = 40;
hex hexagon=new hex();
for(int i = 0; i<9; i++)
for(int k = 0; k<9; k++){

g.setColor(Color.lightGray);
g.fill3DRect(i*side,k*side, side, side, true);
if (matrix[i][k]!=null){System.out.println("i is "+i+" k is "+k);
g.setColor(Color.black);hexagon.DrawHexfromMatrix(g, i, k, Color.black);}
}
}

hex是一个扩展多边形的类(以建模六边形图形),而DrawHexfromMatrix是一个从绘制的矩阵的索引绘制六边形的函数(将六边形放入矩阵的槽中)。如果您认为有帮助,我可以提供整个代码,但现在我不明白为什么 system.out.println 被执行两次。(例如 if[1][2] 和 [2][3] 不是null 它将打印:

    i is 1 k is 2 
i is 2 k is 3
i is 1 k is 2
i is 2 k is 3

我认为这也会影响我的绘图,因为有时虽然 [i][k] 处存在元素但未绘制。(矩阵是十六进制矩阵)。

稍后编辑:是否有可能 g.fill3DRect(i*side,k*side, side, side, true);覆盖我试图用 hexagon.DrawHexfromMatrix(g, i, k, Color.black);???

绘制的六边形

最佳答案

首先,您不应该直接在 JApplet 上绘画。

您应该定义一个添加到 JAppletJPanel。您可以在 JPanel 上进行绘制。

其次,您应该使用 paintComponent() 方法,并调用父类(super class)行为,如下所示。

protected void paintComponent(Graphics g) {
// Paint the default look.
super.paintComponent(g);

// Your custom painting here.
g.drawImage(foregroundImage, x, y, this);
}

第三,您无法控制 Swing 何时触发 paintComponent() 方法。您应该使用其他方法进行计算,并将 paintComponent() 中的代码限制为实际的绘图方法。

关于java - java小程序中的paint()无故被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8067844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com