javafx - 未调用 MouseDragEvent
问题描述
我希望能够读取我的滑块值,因此我为我的控制器类使用了一个事件侦听器:
//Controller class
@FXML
private Slider gridSlider;
@FXML
void sliderChange(MouseDragEvent event) {
int sliderValue = (int) gridSlider.getValue();
System.out.println(sliderValue);
}
//My FXML class
<Slider fx:id="gridSlider" blockIncrement="1.0" layoutX="203.0" layoutY="84.0" majorTickUnit="8.0" max="32.0" min="8.0" minorTickCount="7" nodeOrientation="LEFT_TO_RIGHT" onMouseDragReleased="#sliderChange" prefHeight="38.0" prefWidth="180.0" showTickLabels="true" showTickMarks="true" snapToTicks="true" value="8.0">
我已经尝试了每一个 MouseDragEvent 并且实际上没有调用任何 MouseDragEvents (就像在检测到拖动时应该在我开始拖动滑块时调用的那样)。我找到了这篇文章,但它并没有解决我的问题。 JavaFX鼠标拖动事件未触发
解决方案
MouseDragEvent
与“完全按下-拖动-释放”手势相关联。此类手势必须通过在处理程序Node#startFullDrag()
内部调用来显式启动DRAG_DETECTED
。的文档MouseEvent
提供了有关不同拖动手势的更多信息。
话虽如此,您可能不想使用鼠标事件来知道您Slider
的值何时发生了变化。这将是听你的一个或多个属性Slider
。例如,您可以侦听或绑定到value
属性以始终知道当前值。还有valueChanging
楼盘:
如果为 true,则表示此 Slider 的当前值正在更改。它提供值正在更改的通知。计算出该值后,将其重置为 false。
当用户拖动拇指时,该属性将为真,一旦用户“放下”拇指,该属性将变为假。要在使用 FXML 时监听该属性,您可以将其Slider
注入控制器并在initialize
方法中添加一个监听器:
public class Controller {
@FXML private Slider slider;
@FXML
private void initialize() {
slider.valueChangingProperty().addListener((obs, ov, nv) -> {
if (!nv) {
// do something...
}
});
}
}
但是,如果您愿意,可以通过 FXML 文件添加这样的侦听器——请参阅FXML 简介:
<StackPane ...>
<Slider onValueChangingChange="#handleValueChangingChange"/>
</StackPane>
public class Controller {
@FXML
private void handleValueChangingChange(ObservableValue<Boolean> obs, Boolean ov, Boolean nv) {
if (!nv) {
// Do something...
}
}
}
注意:我的示例使用该valueChanging
属性,因为它似乎提供了您想要的行为,因为您试图在释放鼠标时进行监听。但是,可以以编程方式更改该值,据我所知,这不会影响该valueChanging
属性。因此,如果您想始终知道当前值,则需要观察该value
属性。
推荐阅读
- .htaccess - apache上的转发代理,带有.htaccess到jupyter笔记本
- javascript - 仅在 for 循环中执行所有 Async 函数之后执行函数
- typescript - Typescript 和 WebRTC,“RTCPeerConnection”类型上不存在“createDataChannel”
- ios - 使用 ObjectMapper iOS 高效解析 JSON 数据
- javascript - 未执行 Jsstore 添加
- ruby-on-rails - 在 Rails 应用程序上的 127.0.0.1:6379(ECONNREFUSED) 上连接到 Redis 时出错
- python - 如何使用我从另一个请求中获得的 html 表单发送 POST 请求?
- c# - 如何首先在实体框架代码中设置身份主键的起始值?
- java - spring mvc,我的 bean 如何在控制器中自动装配?
- java - 用于完整应用程序性能测试的 Java JMH 工具