当前位置: 首页 > 知识库问答 >
问题:

未调用MouseDrag事件

陆斌
2023-03-14

我希望能够读取我的滑块值,因此我为我的控制器类使用事件侦听器:

//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,但没有一个MouseDragEvent被实际调用(比如在拖动时检测到的,在我开始拖动滑块时应该被调用)。我找到了这篇文章,但它并没有解决我的问题。JavaFX鼠标拖动事件未触发

共有1个答案

许庆
2023-03-14

MouseDragEvent与“完全按下拖动释放”手势相关联。必须通过在检测到的DRAG\u处理程序中调用Node\startFullDrag()来显式启动此类手势。MouseEvent的文档提供了有关不同拖动姿势的更多信息。

话虽如此,您可能不想使用鼠标事件来了解滑块的值何时发生了更改。这将是侦听滑块的一个或多个属性。例如,您可以侦听或绑定到属性以始终知道当前值。还有valueChanging属性:

如果为true,表示此滑块的当前值正在更改。它提供值正在更改的通知。一旦计算出该值,它将被重置回false。

当用户拖动拇指时,该属性将为true,当用户“放下”拇指时,该属性将变为false。要在使用FXML时侦听属性,可以将滑块插入控制器,并在初始化方法中向其添加侦听器:

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属性。因此,如果希望始终知道当前值,则需要观察属性。

 类似资料:
  • 我有windows 8应用程序启用了通知功能。它在Windows8,8.1和Windows10机器上也很好用。但我发现的问题是,当用户点击通知时,它会从Windows8和8.1应用程序中的LAunchEvent获取启动属性,并按照预期的那样基于toast通知的启动参数。在那里,就像我在Windows10机器上运行应用程序一样,如果用户点击通知,我无法读取toast通知的启动属性。所以有谁能指导我该

  • 我正在使用JSF 2.0创建页面: 我期待在单击复选框时被调用。但是,加载页面时调用一次setMyCheckboxValue()。 如果我写 每次点击都会收到警报。 我的问题是:当我收到警报时,为什么每次onclick事件都不调用? 注意:我也尝试过AJAX,但复选框保持不变。

  • inputText字段的代码如下所示; 到目前为止,我已经试着对包含面板进行了定时的部分刷新,我已经将typeahead模式从无设置为满。没什么区别。 除了每10分钟刷新一次页面之外,还有什么是夫妇造成的问题。仅供参考的是,实际的typeahead是正确工作一致的,它只是onchange事件停止发射。

  • 我试图捕获一个,其中包含XML规则中不允许使用的字符。(例如,” 我已经阅读了描述方法的Javadoc。但是,我没有看到它无法捕获ValidationEvent。 从指定的InputStream中解组XML数据并返回结果内容树。使用此形式的解组API时,验证事件位置信息可能不完整。 在最后一次尝试中,我尝试在网上搜索,但什么也找不到<任何帮助都将不胜感激:D 我很抱歉补充一个问题。(POJO类有点

  • 窗口正在进行无限循环或其他操作,我正在处理后打印数据流,但看起来根本没有达到那个点。 下面是我的伪代码。 我在reduce函数中添加了要打印的日志。正在从reduce函数打印日志。但是这条流没有被打印出来。 并且流源数据是历史数据,即。。超过2个月的旧数据。如果是历史数据流,还需要专门设置其他内容吗? 任何输入都会大有裨益。。

  • 我正在开发一个带有ActionBars的应用程序,它支持姜饼和其他功能。所以基本上我在使用支持库并扩展 行动B活动 对于我所有的活动。除了 onSupportNavigateUp() 方法。它只是不被调用在留档中所述。 每当用户选择从操作栏在应用程序的活动层次结构中向上导航时,就会调用此方法。 这很容易,但我一直不明白为什么它不能像预期的那样工作,谷歌也帮不上忙。这是虫子吗?还是我错过了什么?