Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查鼠标边界的更有效方法_Java_Performance - Fatal编程技术网

Java 检查鼠标边界的更有效方法

Java 检查鼠标边界的更有效方法,java,performance,Java,Performance,我目前正在使用此代码检查鼠标的x和y坐标,看它是否与我的任何按钮一致 if (e.getY() > 204 && e.getY() < 280) { if (e.getX() > 190 && e.getX() < 525) { selected = 1; } } else if (e.getY() > 322 && e.getY() < 3

我目前正在使用此代码检查鼠标的x和y坐标,看它是否与我的任何按钮一致

    if (e.getY() > 204 && e.getY() < 280) {
        if (e.getX() > 190 && e.getX() < 525) {
            selected = 1;
        }
    } else if (e.getY() > 322 && e.getY() < 397) {
        if (e.getX() > 231 && e.getX() < 481) {
            selected = 2;
        }
    } else if (e.getY() > 439 && e.getY() < 512) {
        if (e.getX() > 271 && e.getX() < 442) {
            selected = 3;
        }
    } else if (e.getY() > 560 && e.getY() < 634) {
        if (e.getX() > 282 && e.getX() < 425) {
            selected = 4;
        }
    } else {
        selected = 0;
    }
if(e.getY()>204和&e.getY()<280){
如果(e.getX()>190和&e.getX()<525){
所选=1;
}
}否则如果(e.getY()>322和&e.getY()<397){
如果(e.getX()>231和&e.getX()<481){
选择=2;
}
}否则如果(e.getY()>439和&e.getY()<512){
如果(e.getX()>271&&e.getX()<442){
选择=3;
}
}否则如果(e.getY()>560&&e.getY()<634){
如果(e.getX()>282&&e.getX()<425){
所选=4;
}
}否则{
所选=0;
}
它100%工作,但它似乎减慢了我的程序相当一点。有没有更有效的方法来检查我的鼠标是否在我的4个按钮上


谢谢

代码中唯一慢的部分可能是
getX()
getY()
方法。
if
逻辑不应该使程序慢很多

尝试使用变量而不是调用函数:

final int x = e.getX();
final int y = e.getY();
// + same logic

您应该使用一个私有方法,如
private void updateMouse()
,在需要时调用它,然后在方法内部放置局部变量来存储getter方法
int x=e.getX()
int y=e.getY()
,这样当您调用
updateMouse
the
getX()方法时,它就会更新
getY()
位置,还可以节省调用
getX()
getY()
所需的效率

然后将代码放入其中,如下所示:

private void updateMouse() 
{ 
    int x = e.getX(); 
    int y = e.getY()

    **** your if statement here
}
现在,您将能够在特定时间运行它,比如每10帧,而不仅仅是连续运行。 这会让你节省一点效率


(对不起,我的英语不好)

除非
getX()
getY()
很慢,否则我不认为这段代码会减慢任何速度。我建议您研究一下a的分区逻辑,尽管只有四个按钮可能不会有太大区别。As@JeanLogeart说,这真的不应该拖慢任何东西,除非每次鼠标更新时调用它不止一次,或者
get。(
真的很慢。如果在条件之前只调用一次
getX()
getY()
,并将它们存储到本地,而不是每次最多调用8次(这是大多数情况),那么性能可能会略有提高。您如何处理这一结果?如果您在事件调度程序线程中处理此结果,这可能会使您的程序响应速度变慢,并且显得滞后。您是在使用SWT还是什么?在SWT中,你看到了多少减速?这个方法被调用的频率是多少(实际的而不是预期的),getX和getY的速度是多少?据我所知,这会使代码更可读,而不是更快。。。我试试这个,看看是否能解决问题。如果这不能解决问题,可能是程序中其他地方的问题it@wrongAnswer即使调用的getter只是一个简单的“返回成员”,如果您至少使用了两次局部变量,那么使用它也不会减慢速度(即使getter是内联的,它仍然是一个要跳过的间接寻址,而局部变量基本上是空闲的;它被分配到堆栈上,这是非常快的缓存内存)。