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

尝试在scalafx中获取用户的最新鼠标单击

管炳
2023-03-14

我正在尝试获得用户的最新鼠标点击,以便显示正确的表。但是,我找不到任何办法来实施这个想法。如何使用mouseEvent函数获得用户最近的鼠标点击?

我尝试使用if else语句,但当monstersTable1中仍然有值时,它就不起作用了

def handleEditMonster(action : ActionEvent) = {
    val selectedMonster1 = monstersTable1.selectionModel().selectedItem.value
    val selectedMonster2 = monstersTable2.selectionModel().selectedItem.value

    if (selectedMonster1 != null){
        val okClicked = MainApp.showMonsterEditDialog(selectedMonster1)
        if (okClicked) showMonstersDetails(Some(selectedMonster1))

    } else if (selectedMonster2 != null) {
        val okClicked = MainApp.showMonsterEditDialog(selectedMonster2)
        if (okClicked) showMonstersDetails(Some(selectedMonster2))

    } else {
        // Nothing selected.
        val alert = new Alert(Alert.AlertType.Warning){
          initOwner(MainApp.stage)
          title       = "No Selection"
          headerText  = "No monsters Selected"
          contentText = "Please select a monsters in the table."
        }.showAndWait()
      }
    }

我希望它能够访问第二个表,即使selectedMonster1仍然是!=null

共有1个答案

胡志
2023-03-14

从你的问题看不出你到底想做什么,所以请耐心听我说...(为了将来的参考,最好创建一个“最小的、完整的、可验证的示例”来说明您的问题。)

我假设您有两个scalafx.scene.control.tableview实例,通过monsterstable1monsterstable2引用。您希望允许用户选择第一个表中的一个怪物,或者第二个表中的一个怪物,但不能同时从每个表中选择一个怪物。

我不清楚您的handleeditMonster函数何时被调用,所以我猜测它是在用户单击(例如,一个Edit Monster按钮)时被调用的,作为该按钮的单击事件处理程序。

假设上面的内容是准确的,您应该监听表选择中的更改,并在进行新选择时清除另一个表中的选择。每个表中当前选择的项是一个属性,我们可以向其添加侦听器,因此我们可以通过以下代码(在场景的初始化中)实现这一点:

// In the onChange handlers, the first argument references the observable property
// that has been changed (in this case, the property identifying the currently
// selected item in the table), the second is the property's new value and the third
// is its previous value. We can ignore the first and the third arguments in this
// case. If the newValue is non-null (that is, if the user has made a
// selection from this table), then clear the current selection in the other
// table.
monstersTable1.selectionModel.selectedItem.onChange {(_, newValue, _) =>
  if(newValue ne null) monstersTable2.selectionModel.clearSelection()
}
monstersTable2.selectionModel.selectedItem.onChange {(_, newValue, _) =>
  if(newValue ne null) monstersTable1.selectionModel.clearSelection()
}

这对您来说应该很有用,您的HandleEditMonster函数现在应该可以工作了。您可能希望添加一个断言,以防止两个表都有一个当前选择,这将指示选择处理程序逻辑中的bug。

 类似资料:
  • 我正在编写一个小型测试应用程序,该应用程序使用Scala中的类和。问题在于: 抛出错误: 我不明白为什么当这个完全相同的片段出现在方法中时会编译,而当它出现在对象的代码中时却不会编译。 顺便说一句,在浏览了大量ScalaFX代码之后,我有些头晕,因为我已经看到了许多绑定到事件的不同方法,我正在使用的就是一种,使用FilterEvent设置onMouseClicked变量(有和没有第一类函数)。另外

  • 问题内容: 斯威夫特新手。 我在执行一项琐碎的任务时遇到了麻烦。我要做的就是 按需 获取鼠标光标的x,y坐标。我宁可 不要 等到鼠标移动事件触发后再抓住指针的坐标。 将不胜感激! 问题答案: 您应该看看NSEvent方法mouseLocation 编辑/更新: Xcode 11•Swift 5.1 如果您希望在应用程序处于活动状态时监视任何窗口上的事件,则可以添加与mouseMoved掩码匹配的L

  • 目前正在尝试ScalaFX。 设想如下: 我有一些节点,它们由一些边连接。 我更喜欢的是类似于 如何在JavaFX中检测特定点的节点? 或 JavaFX 2.2在坐标处获取节点(可视化树点击测试) 这些问题基于JavaFX的旧版本,并使用了不推荐的方法。 到目前为止,我还没有在ScalaFX8中找到任何替代或解决方案。有没有一个很好的方法来获得一定半径内的所有节点?

  • 问题内容: 根据这个(使用JavaScript在光标下找到一个单词d-under-cursor-using- javascript))链接我可以在鼠标[指针下得到一个单词。英语很好。我将其更改(对于阿拉伯语言) 但每个单词返回“ $ 1”。请帮忙! 问题答案: 您 需要 出现在原始正则表达式中的括号。在正则表达式中,括号形成一个“匹配组”,该替换组将替换字符串中的“ ”。 正则表达式中没有任何匹配

  • 我正在使用Pygame制作一个简单的游戏。我已经将Pygame显示屏嵌入到Tkinter窗口中。 现在,当我执行这个-时,它会打印位置,但当我移动鼠标时,它不会打印更新后的鼠标位置。它仍然会打印上一个鼠标位置,除非我单击显示器。 在将Pyplay显示嵌入到Tkinter窗口之前,同一程序不会发生这种情况。所以,事件系统似乎工作不正常。 有人建议,您可以检测Tkinter中的事件,然后将它们转发给P

  • 问题内容: 我正在尝试使用jQuery在元素中获取鼠标的相对坐标。 我的代码似乎无法正常运行,并且没有控制台错误。 码: index.html ja.js(jQuery函数) 零件 我听说jQuery在反应方面表现不佳。我的语法正确还是完全有更好的方法? 谢谢。 问题答案: 正如其他人提到的那样,问题是当jQuery尝试附加事件侦听器时,react尚未将您的组件呈现给DOM。 您根本不需要jQue