Попытка получить последний щелчок мыши пользователя в scalafx - PullRequest
2 голосов
/ 19 июня 2019

Я пытаюсь получить последний щелчок мыши пользователя, чтобы отобразить правильную таблицу.Однако я не могу найти способ реализовать эту идею.Как получить последний щелчок мыши пользователя с помощью функции 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все еще! = ноль

1 Ответ

1 голос
/ 20 июня 2019

Из вашего вопроса не совсем понятно, что вы пытаетесь сделать, поэтому, пожалуйста, потерпите меня ... (Для дальнейшего использования лучше всего создать минимальный, полный и проверяемый ''). пример '' , который иллюстрирует вашу проблему.)

Я предполагаю, что у вас есть два экземпляра 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 должна теперь работать. Возможно, вы захотите добавить утверждение для защиты обеих таблиц с текущим выбором, что указывает на ошибку в логике обработчика выбора.

...