2016-07-04 3 views
0

Wenn ich auf die Außenseite eines Kombinationsfelds (freier Speicherplatz in diesem Fenster) klicken, wird die Auswahl des Kombinationsfelds verschwinden und null drucken.ComboBox Auswahl verloren, wenn außerhalb der Box geklickt

Dies ist innerhalb Controller-Klasse

@FXML 
public ComboBox routineGridShowComboBox; 

public void actionForRoutineGridShowComboBox(ActionEvent event){ 
    System.out.println(routineGridShowComboBox.getValue()); 
} 

public void addOptionToComboBox(){ 
    routineGridShowComboBox.getItems().removeAll(routineGridShowComboBox.getItems()); 
    routineGridShowComboBox.getItems().addAll("Hello","World"); 
} 

und hier ist der FXML Code:

<ComboBox fx:id="routineGridShowComboBox" layoutX="24.0" layoutY="56.0" onAction="#actionForRoutineGridShowComboBox" onMouseClicked="#addOptionToComboBox" prefHeight="25.0" prefWidth="384.0" promptText="Choose your subject ... " /> 
+0

Sie haben nicht genügend Informationen zur Verfügung gestellt. Niemand kann möglicherweise wissen, was e. G. '# addOptionToComboBox' macht, wie Ihre' ComboBox' gefüllt ist, was anderes passiert, etc. – Roland

+0

Was Sie gepostet haben, tut nicht das, was Sie beschreiben - es löscht die Elemente und fügt sie per Mausklick wieder hinzu. Allerdings verstehe ich nicht wirklich, warum machst du das. Wenn Sie die Auswahl löschen möchten, wenn das Kombinationsfeld geöffnet wird, können Sie zum Beispiel 'routineGridShowComboBox.setOnShowing ((e) -> routineGridShowComboBox.setValue (null));' – DVarga

Antwort

2

Jedes Mal, wenn die ComboBox Popup öffnen, indem Sie darauf klicken, entfernen Sie alle Artikel (welche sein sollten getan, indem Sie List.clear auf der Artikelliste btw) anrufen, bevor Sie sie redigieren. Da der ComboBox Wert nicht etwas sein kann, das nicht in der items ist, wird der Wert auf null festgelegt. Wenn Sie keinen neuen Wert auswählen, indem Sie irgendwo anders klicken, außer auf die Einträge im Popup ComboBox, wird das ausgewählte Element nicht geändert.

Sie sollten auf jeden Klick nicht alle Einträge löschen und löschen. Fügen Sie die Elemente einfach einmal hinzu. In diesem Fall wäre die initialize Methode ein geeigneter Ort dafür.

die addOptionToComboBox Methode von der Steuerung entfernen und

public void initialize() { 
    routineGridShowComboBox.getItems().setAll("Hello", "World"); 
} 

hinzuzufügen oder den Code aus dem Körper zu einem bestehenden Verfahren initialize hinzuzufügen.