2017-02-05 1 views
0

У меня есть Button со встроенным ComboBox в виде графического узла:Как обработать встроенное действие ComboBox отдельно от Button Action?

<Button alignment="CENTER_RIGHT" contentDisplay="RIGHT" mnemonicParsing="false" onAction="#handleQuickNote" text="QuickNote"> 
    <graphic> 
     <ComboBox fx:id="cboQuickNoteList" prefWidth="5.0" /> 
    </graphic> 
</Button> 

поведение по умолчанию для ComboBox, кажется, чтобы вызвать метод onHandle на кнопку, когда выбран элемент.

Я попытался использовать отдельный слушатель на ComboBox, но это, как представляется, называется ПОСЛЕ того, как функция кнопки была.

Кнопка Handler:

@FXML 
private void handleQuickNote() { 
    // Attempt to create new "QuickNote Transaction" 
    Global.transactionListController.addTransaction("QuickNote"); 
} 

ComboBox слушатель:

// Add listener to the ComboBox to override the button function 
    cboQuickNoteList.valueProperty().addListener((observable, oldValue, newValue) -> { 
     if (newValue != null) { 
      // Create new QuickNotes transaction 
      QuickNoteController newQuickNoteTransaction = new QuickNoteController(); 
      newQuickNoteTransaction.setQuickNote(newValue); 
     } 
    }); 

Как будет идти об отмене обработчика кнопки, если элемент выбран из ComboBox?

+0

Почему у вас есть ComboBox внутри кнопки? – ItachiUchiha

+0

Он соответствует дизайну и функциональности моего приложения. Я мог бы разделить их, но предпочел бы сохранить ComboBox внутри кнопки. – Zephyr

+1

Я не уверен, что ваша функциональность желает, но я уверен, что должно быть лучшее решение для того, что у вас есть. AFAIT, в вашем текущем подходе, похоже, нет способа узнать, хочет ли пользователь нажать на кнопку или на ComboBox. Более того, поскольку обработчик действий кнопок называется первым, все еще сложнее фильтровать. – ItachiUchiha

ответ

1

Comsume onAction Событие на ComboBox. Это предотвращает получение Button.

Внутри initialize метода:

cboQuickNoteList.setOnAction(ActionEvent::consume); 
+0

Это было прекрасно, @fabian. Спасибо! – Zephyr