java applet中的paint()被无故两次调用
有一个常见的原因为什么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
。
您应该定义一个JPanel
添加到中的JApplet
。你画到了JPanel
。
其次,您应该使用该paintComponent()
方法,并调用超级类行为,如下所示。
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 applet中的paint()被无故两次调用 的全部内容, 来源链接: utcz.com/qa/413081.html