Java 杰蒙基很漂亮。检测用户是否停止滑动
有没有办法检测用户是否停止slyding?也许是bij鼠标输入检查之类的。我尝试在onSliderChange事件中使用鼠标isButton0Release和hasFocus来检查用户是否停止滑动,但这不起作用 到目前为止我得到了什么Java 杰蒙基很漂亮。检测用户是否停止滑动,java,jmonkeyengine,nifty-gui,Java,Jmonkeyengine,Nifty Gui,有没有办法检测用户是否停止slyding?也许是bij鼠标输入检查之类的。我尝试在onSliderChange事件中使用鼠标isButton0Release和hasFocus来检查用户是否停止滑动,但这不起作用 到目前为止我得到了什么 @NiftyEventSubscriber(id = "speedSlider") public void onSliderChange(String id, SliderChangedEvent event) { boolean test2 = event
@NiftyEventSubscriber(id = "speedSlider")
public void onSliderChange(String id, SliderChangedEvent event)
{ boolean test2 = event.getSlider().hasFocus();
boolean test = nifty.getMouseInputEventQueue().getLastMouseDownEvent().isButton0Release();
System.out.println("before " + test2);
int speed = (int)event.getValue();
speedTextField.getRenderer(TextRenderer.class).setText(speed + "");
if(test2){
System.out.println("after " + test2);
main.setSimSpeed(speed);
}
}
以及xml中的滑块
<panel id="speed_up_down_panel" height="30px" width="180px" childLayout="center">
<control id="speedSlider" name="horizontalSlider" width="150px" min="1" initial="1" buttonStepSize="1">
<image id="#position" filename="Interface/sliderbutton.png" visibleToMouse="true" width="40px" height="40px"></image>
</control>
</panel>
由于我的测试,代码现在有点混乱。我能想到的最简单的方法是定义自己的控件,该控件添加了一个
onRelease
事件处理程序:
<?xml version="1.0" encoding="UTF-8"?>
<nifty-controls xmlns="http://nifty-gui.lessvoid.com/nifty-gui">
<controlDefinition name="horizontalSlider" style="nifty-horizontal-slider"
controller="de.lessvoid.nifty.controls.slider.SliderControl"
inputMapping="de.lessvoid.nifty.controls.scrollbar.ScrollbarInputMapping">
<panel style="#panel">
<interact onMouseWheel="mouseWheel()"/>
<image style="#left">
<interact onClickRepeat="upClick()"/>
</image>
<image id="#background" style="#background">
<interact onClick="mouseClick()" onClickMouseMove="mouseClick()"/>
<image id="#position" style="#position">
<interact onClick="mouseClick()" onClickMouseMove="mouseClick()"
onRelease="onRelease()"/>
<!-- ^ ^ ^ ADD THIS ^ ^ ^ -->
</image>
</image>
<image style="#right">
<interact onClickRepeat="downClick()"/>
</image>
</panel>
</controlDefinition>
然后向控制器添加一个方法
public void onRelease()
。我能想到的最简单的方法是定义自己的控件,该控件添加一个onRelease
事件处理程序:
<?xml version="1.0" encoding="UTF-8"?>
<nifty-controls xmlns="http://nifty-gui.lessvoid.com/nifty-gui">
<controlDefinition name="horizontalSlider" style="nifty-horizontal-slider"
controller="de.lessvoid.nifty.controls.slider.SliderControl"
inputMapping="de.lessvoid.nifty.controls.scrollbar.ScrollbarInputMapping">
<panel style="#panel">
<interact onMouseWheel="mouseWheel()"/>
<image style="#left">
<interact onClickRepeat="upClick()"/>
</image>
<image id="#background" style="#background">
<interact onClick="mouseClick()" onClickMouseMove="mouseClick()"/>
<image id="#position" style="#position">
<interact onClick="mouseClick()" onClickMouseMove="mouseClick()"
onRelease="onRelease()"/>
<!-- ^ ^ ^ ADD THIS ^ ^ ^ -->
</image>
</image>
<image style="#right">
<interact onClickRepeat="downClick()"/>
</image>
</panel>
</controlDefinition>
然后向控制器添加一个方法
public void onRelease()
。您能解释一下为什么需要此事件吗?在滑动操作结束时做出反应并不是那么容易。主要是因为执行该操作的方法不止一种。您可以拖动控制柄,单击轨迹,使用键盘。当你不拖动手柄时,“停止滑动”是如何定义的?我之所以需要这样做是因为我必须将滑块的值通过套接字发送给控制器。如果我只使用onSliderChange事件,那么该值将被发送多次,因此我认为当用户停止滑动时,该值最好被发送一次。在固定的超时时间内构建不是更安全吗?如果该值已更改且在x
毫秒内不再更改,则会发送更新后的值吗?这将包括通过鼠标点击/按下曲目和键盘的更改。您能解释一下为什么需要此活动吗?在滑动操作结束时做出反应并不是那么容易。主要是因为执行该操作的方法不止一种。您可以拖动控制柄,单击轨迹,使用键盘。当你不拖动手柄时,“停止滑动”是如何定义的?我之所以需要这样做是因为我必须将滑块的值通过套接字发送给控制器。如果我只使用onSliderChange事件,那么该值将被发送多次,因此我认为当用户停止滑动时,该值最好被发送一次。在固定的超时时间内构建不是更安全吗?如果该值已更改且在x
毫秒内不再更改,则会发送更新后的值吗?这将包括通过鼠标单击/按下曲目和键盘更改进行的更改。