0

我在 Eclipse 中工作,我想知道我是否可以做一个 if 语句来检查是否BufferedImage已在框架上绘制/绘制。出于某种原因,它没有绘制正确的图像,因为可点击区域在不应该出现的情况下出现在该图片上。

例如,当我单击区域从 4>5 开始时,一切都很好。当我从 5 单击到 4 时,我最终在 6 处出现,因为 4 中的“区域”出现在 5 中(图像应始终在显示可点击区域之前绘制)甚至在它被绘制之前。我想限制它以检查图像是否首先被绘制到框架上。

除了我现在拥有的东西之外,我真的不想使用其他任何东西(所以没有实现新的类来完成这项任务),我真的只是想要一种简单而有效的方法来解决这个问题。这就是我所说的:

...
MouseAdapter mouseHandler = new MouseAdapter()
      {
          public void mouseClicked(MouseEvent e)
          {
            repaint();
             if(n==0)
            {
              if(e.getX()>=459 && e.getX()<491 && e.getY()>=111 && e.getY()<133
                 {
                     n = 4;
                 }
                 return;
            }
            if(n==5)
            {
                if(...)
                {
                    n = 4;
                }
                    return();
            }
            if(n==6)
            {
               if(...)
                {
                    n = 5;
                }

               if(...)
                {
                    n = 0;
                }

               if(...)
                {
                    n = 6;
                }
                    return();
        }
  }
  ...
4

2 回答 2

1

我认为您可能需要提供更多信息。问题可能在于你如何重新粉刷,而不是它是否被粉刷过。如果您将另一个线程作为主程序运行,您可能希望将鼠标事件同步发送到该线程,以便主线程可以处理鼠标单击然后重新绘制。

另一种解决方案可能是覆盖重绘方法并在那里绘制缓冲图像,但您可能已经这样做了。

另外,有点离题,我注意到您使用 for 循环来确定是否在特定区域单击了鼠标。

您可以缩短代码:

for(int i=459; i<491; i++){
    if(e.getX()==i){
        for(int j=111; j<133; j++){
            if(e.getY()==j){
                //action taken
            }
        }
    }
}

至:

if(e.getX()>=459 && e.getX()<491 && e.getY()>=111 && e.getY()<133{
    //action taken
}

这将在您的代码中占用更少的空间,并减少检查每个像素的时间。

回到你的问题。我不知道判断是否已绘制缓冲图像的功能。您可能遇到的问题可能不在提供的代码中。发布您的其余代码将是有益的。

于 2013-04-10T02:59:16.540 回答
0

好的,我找到了解决方案,我忘了回到这个问题,让你知道。问题是由于某种原因鼠标双击。你几乎可以说它是“递归的”。我决定将 mouseListener 从paintComponent 内部移动到它外部,并且肯定足以修复它。

于 2013-04-16T22:09:06.763 回答