Java 如何在鼠标单击时立即打开和关闭布尔值?

Java 如何在鼠标单击时立即打开和关闭布尔值?,java,boolean,mouseevent,Java,Boolean,Mouseevent,我正在做这个项目,我有一个布尔连接到鼠标右键,有点像。因此,当我按下RMB时,布尔值将切换为true,但不会变回false,除非我再次按下它。有没有办法在瞬间打开/关闭布尔值?就像它保持一个滴答声,然后关闭? (正如您可能理解的那样,我对Java编码非常熟悉) vvv代码 if(Component.isMouseRightClicked) { if(block[x][y].id == Tile.underDirt || block[x][y].id == Tile.underDirtRi

我正在做这个项目,我有一个布尔连接到鼠标右键,有点像。因此,当我按下RMB时,布尔值将切换为true,但不会变回false,除非我再次按下它。有没有办法在瞬间打开/关闭布尔值?就像它保持一个滴答声,然后关闭? (正如您可能理解的那样,我对Java编码非常熟悉)

vvv代码

if(Component.isMouseRightClicked) {
    if(block[x][y].id == Tile.underDirt || block[x][y].id == Tile.underDirtRight || block[x][y].id == Tile.underDirtLeft || block[x][y].id == Tile.underDirtTop || block[x][y].id == Tile.underDirtRight || block[x][y].id == Tile.underDirtBottom || block[x][y].id == Tile.underDirtBR || block[x][y].id == Tile.underDirtTR || block[x][y].id == Tile.underDirtTL || block[x][y].id == Tile.underDirtBL) {
        if(sid != Tile.air) {
            block[x][y].id = sid;
        }
    }

    if(block[x][y].id == Tile.dirt || block[x][y].id == Tile.sand || block[x][y].id == Tile.stone) {
        if(sid == Tile.dirt) {
            block[x][y].id = Tile.dirtWall;
        }
        if(sid == Tile.stone) {
            block[x][y].id = Tile.stoneWall;
        }
        if(sid == Tile.sand) {
            block[x][y].id = Tile.sandWall;
        }
    }
}
这就是布尔值为真时发生的情况

vvv(通过鼠标单击)打开的布尔值vvv

下面是我如何(悲惨地)尝试立即关闭它

public void mouseReleased(MouseEvent e) {
    if(e.getButton() == MouseEvent.BUTTON1) {
        Component.isMouseLeft = false;
        Level.blockBreakTimer = 0;
    } else if(e.getButton() == MouseEvent.BUTTON3) {
        Component.isMouseRight = false;
        Component.isMouseRightClicked = false;
        Level.buildTimer = 0;
    }
}
(我也有其他东西的按钮,但我想你只需要看看isMouseRightClicked)


谢谢你的帮助,非常感谢。

啊,对不起。起初我误解了你的问题

生成嵌套的if-else语句,然后在末尾将MouseClicked设置为false

if(mouseRclick) {
    if(block[x][y].isUnder()) {
        if(sid != Tile.air) {
            block[x][y].id = sid;
        }
    // added "else"
    } else if(block[x][y].isGround()) {
        block[x][y].id = toWall(sid);
    }
    // Makes sure that it only runs once.
    mouseRclick = false;
}

(我现在在手机上,所以我把它缩短了。如果你愿意,我可以在回家后重新键入,但你需要多等30多分钟。)

使用摆动计时器。可能的错误可能是使用了鼠标锁定功能,正如“按下并释放”鼠标单击时所说的那样。你应该试试鼠标按下,而不是鼠标点击
if(mouseRclick) {
    if(block[x][y].isUnder()) {
        if(sid != Tile.air) {
            block[x][y].id = sid;
        }
    // added "else"
    } else if(block[x][y].isGround()) {
        block[x][y].id = toWall(sid);
    }
    // Makes sure that it only runs once.
    mouseRclick = false;
}