Из вашего вопроса не совсем понятно, что вы пытаетесь сделать, поэтому, пожалуйста, потерпите меня ... (Для дальнейшего использования лучше всего создать минимальный, полный и проверяемый ''). пример '' , который иллюстрирует вашу проблему.)
Я предполагаю, что у вас есть два экземпляра scalafx.scene.control.TableView
, на которые ссылаются через monstersTable1
и monstersTable2
. Вы хотите, чтобы пользователь мог выбрать либо одного из монстров в первой таблице, либо одного из монстров во второй таблице, но не иметь возможности выбирать одного монстра из каждой таблицы одновременно.
Мне неясно, когда вызывается ваша 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
должна теперь работать. Возможно, вы захотите добавить утверждение для защиты обеих таблиц с текущим выбором, что указывает на ошибку в логике обработчика выбора.