gpt4 book ai didi

java - 用某种表格替换嵌套的 if 子句

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:08:40 24 4
gpt4 key购买 nike

我想制作一个简单的小 awt.component,它在所有 4 个边(以及 4 个角)上给我一个调整大小的光标,在组件的“主体”上给我一个移动光标。

下面的代码可以工作,但对于这样一个简单的任务来说看起来有点丑陋和复杂。

@Override
public void mouseMoved(MouseEvent arg0) {
if (interactMode != InteractivityMode.EDIT_WINDOW){
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
return;
}

// left border
if (arg0.getX() < RESCALE_AREA) {
if (arg0.getY() < RESCALE_AREA) {
setCursor(Cursor.getPredefinedCursor(Cursor.NW_RESIZE_CURSOR));
} else if(arg0.getY() > getHeight()-RESCALE_AREA) {
setCursor(Cursor.getPredefinedCursor(Cursor.SW_RESIZE_CURSOR));
} else {
setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
}
// right border
} else if (arg0.getX() > getWidth() - RESCALE_AREA) {
if (arg0.getY() < RESCALE_AREA) {
setCursor(Cursor.getPredefinedCursor(Cursor.NE_RESIZE_CURSOR));
} else if(arg0.getY() > getHeight()-RESCALE_AREA) {
setCursor(Cursor.getPredefinedCursor(Cursor.SE_RESIZE_CURSOR));
} else {
setCursor(Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR));
}
// top border
} else if (arg0.getY() < RESCALE_AREA) {
setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
// bottom border
} else if (arg0.getY() > getHeight()-RESCALE_AREA) {
setCursor(Cursor.getPredefinedCursor(Cursor.S_RESIZE_CURSOR));
// cursor not on the border
} else {
setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
}

}

可以用更短/更清晰/更好的方式完成吗?

是否有某种“真值表”可以让我写出更易读和防错的东西,比如:

X < RA | X > w-RA | Y < RA | Y > h-RA | result
----------------------------------------------
y | n | y | n | NW cursor
y | n | n | n | W cursor
y | n | n | y | SW cursor
n | y | y | n | NE cursor
n | y | n | n | E cursor
n | y | n | y | SE cursor
n | n | y | n | N cursor
n | n | n | n | movement cursor
n | n | n | y | S cursor

奖励: 在我看来,只要我移动鼠标光标,即使只移动一个像素,上面的代码(理论上)都会执行。这似乎是相当多的计算能力。是否有另一种方法可以做到这一点,或者我应该停止担心并将其全部留给 awt 事件处理? :)

最佳答案

解决此问题的一种方法是将可能的游标存储在一个 9 元素数组中,并使用条件来计算该数组中的索引。类似的东西:

int horzIndex = x < RA ? 0 : x > w-RA ? 2 : 1;
int vertIndex = y < RA ? 0 : y > h-RA ? 2 : 1;
return cursors[horzIndex * 3 + vertIndex];

关于java - 用某种表格替换嵌套的 if 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34863947/

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