当前位置: 首页 > 面试题库 >

java applet中的paint()被无故两次调用

岳安福
2023-03-14
问题内容

有一个常见的原因为什么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()为实际的绘制方法。



 类似资料:
  • 问题内容: 我在Go中关注一个简单的Web服务器示例。 我插入了一条语句,使生成的代码如下所示: 问题是,每当我在Web浏览器中加载端口8000时,此函数就会被调用两次。这是一个问题,因为我打算在每次页面访问时增加一个计数器。通过这种行为,计数器将增加两次。OTOH,如果我这样做,它只会被调用一次。 我觉得我在这里失踪真的很愚蠢。 问题答案: 只需记录请求。您将意识到您的浏览器还请求/favico

  • 在我的应用程序中,我将TextWatcher放在EditText上。当我更改EditText的文本时,TextWatcher的事件会被调用两次。 我正在使用模拟器来运行应用程序。

  • 编辑:由于代码剪贴不会重现错误-这里有一个指向github repo的链接:(代码远未完成) https://github.com/altruios/clicker-game 我现在已经在两台计算机上运行了它——这两台计算机都有相同的行为,而代码剪报并没有显示出来。 因此,我正在构建一个clicker游戏来学习react,我不明白为什么这段代码会以这种方式运行: 在主应用程序中,我有以下功能: 那

  • 我将Ionic3与一个一起使用。我有下面的函数,出于某种原因,即使该函数只被调用一次,第三行也会被触发两次。 问题 这引起了一个问题,因为正在获取第二个订阅的值,并且第一个订阅丢失,不允许我取消订阅。 问题 如何创建一个只有一个订阅的

  • 问题内容: 我有一个想法,可能是因为我正在做一些样式设计来更改单选按钮,但是我不确定。我正在设置一个onClick事件,该事件两次调用了我的函数。我已删除它以确保它没有在其他地方被触发,并且onClick似乎是罪魁祸首。 我的功能目前仅是运输选项的简单控制台日志: 如果没有任何理由可以在这里看到为什么会发生这种情况,我可以发布其余代码,但是有很多方面,我认为这与之无关,但是我认为这是一个很好的起点

  • 我正在开发一个应用程序使用Android4.0IC和碎片。 考虑ICS4.0.3(API level 15)API的演示示例应用程序中的修改示例: }