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