我试图获得用户最新的鼠标单击以显示正确的表格。但是,我找不到实现此想法的任何方法。如何使用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
答案 0 :(得分:1)
从您的问题中尚不清楚您要做什么,所以请您忍受...(以供将来参考,最好创建一个''minimal, complete and verifiable example''来说明您的问题。 )
我假设您有两个scalafx.scene.control.TableView
实例,分别通过monstersTable1
和monstersTable2
引用。您希望允许用户选择第一个表中的一个怪物,或第二个表中的一个怪物,但不能同时从每个表中选择一个怪物。
我不清楚何时调用您的handleEditMonster
函数,因此我猜测用户单击例如 Edit Monster 按钮时会调用该函数,因为该按钮的clicked事件处理程序。
我有那个权利吗?
假设以上内容正确无误,则应侦听表选择中的更改,并在做出新选择时清除另一个表中的选择。每个表中当前选定的项目都是一个属性,我们可以向其添加一个侦听器,因此我们可以使用以下代码(在场景的初始化中)实现此目的:
// 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
函数现在应该可以工作了。您可能想要添加一个断言以防止两个表都具有当前选择,这将表明选择处理程序逻辑中存在错误。