试图在 scalafx 中获取用户最新的鼠标点击
Trying to get user's latest mouse click in scalafx
我正在尝试获取用户最近的鼠标点击以显示正确的 table。但是,我找不到任何方法来实现这个想法。如何使用 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()
}
}
我希望它能够访问第二个 table 即使 selectedMonster1 仍然是 != null
从你的问题中并不完全清楚你想做什么,所以请耐心等待...(为了将来参考,最好创建一个 ''minimal, complete and verifiable example'' 来说明你的问题。)
我假设您有两个 scalafx.scene.control.TableView
实例,通过 monstersTable1
和 monstersTable2
引用。您想要允许用户 select 第一个 table 中的一个怪物,或者第二个 table 中的一个怪物,但不能 select 同时从每个 table 中抽取一个怪物。
我不清楚你的 handleEditMonster
函数是什么时候被调用的,所以我猜它是在用户点击时被调用的,比方说,一个 Edit Monster 按钮,作为该按钮的点击事件处理程序。
我说得对吗?
假设以上是准确的,你应该监听 table selection 的变化,并在新的 table 清除另一个 table 的 selection =31=]离子被制成。每个 table 中的当前 selected 项是一个 属性,我们可以向其添加侦听器,因此我们可以使用以下代码(在您的场景初始化中)实现此目的:
// 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
功能现在应该可以使用了。您可能想要添加一个断言来防止两个 table 都具有当前 selection,这表明 selection 处理程序逻辑中存在错误。
我正在尝试获取用户最近的鼠标点击以显示正确的 table。但是,我找不到任何方法来实现这个想法。如何使用 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()
}
}
我希望它能够访问第二个 table 即使 selectedMonster1 仍然是 != null
从你的问题中并不完全清楚你想做什么,所以请耐心等待...(为了将来参考,最好创建一个 ''minimal, complete and verifiable example'' 来说明你的问题。)
我假设您有两个 scalafx.scene.control.TableView
实例,通过 monstersTable1
和 monstersTable2
引用。您想要允许用户 select 第一个 table 中的一个怪物,或者第二个 table 中的一个怪物,但不能 select 同时从每个 table 中抽取一个怪物。
我不清楚你的 handleEditMonster
函数是什么时候被调用的,所以我猜它是在用户点击时被调用的,比方说,一个 Edit Monster 按钮,作为该按钮的点击事件处理程序。
我说得对吗?
假设以上是准确的,你应该监听 table selection 的变化,并在新的 table 清除另一个 table 的 selection =31=]离子被制成。每个 table 中的当前 selected 项是一个 属性,我们可以向其添加侦听器,因此我们可以使用以下代码(在您的场景初始化中)实现此目的:
// 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
功能现在应该可以使用了。您可能想要添加一个断言来防止两个 table 都具有当前 selection,这表明 selection 处理程序逻辑中存在错误。