2016-10-05 8 views
0

Die Frage mag auf den ersten Blick ziemlich einfach scheinen, aber ich habe schon seit ein paar Tagen Probleme damit.Detect Mausklick auf SELECTION Editierbare ComboBox JavaFX

Also, mein Problem ist, dass ich Mausklick und die Auswahl erkennen möchte, wenn die ComboBox Auswahl geöffnet ist und der Mausklick gemacht wird, um die Option zu wählen.

Also, was es tun sollte, ist die Maus-Klick auf die Auswahl zu erkennen und auch als auch den gewählten Wert erhalten:

enter image description here

PS: Der Code für meine ComboBox hier zu sehen ist: Select JavaFX Editable Combobox text on click

Fühlen Sie sich frei, zusätzliche Fragen zu stellen.

Antwort

2

Verwenden Sie einfach ein Zellfabrik und registrieren einen Handler mit der Zelle:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.ComboBox; 
import javafx.scene.control.ListCell; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class ComboBoxMouseClickOnCell extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     ComboBox<String> combo = new ComboBox<>(); 
     combo.getItems().addAll("One", "Two", "Three"); 
     combo.setCellFactory(lv -> { 
      ListCell<String> cell = new ListCell<String>() { 
       @Override 
       protected void updateItem(String item, boolean empty) { 
        super.updateItem(item, empty); 
        setText(empty ? null : item); 
       } 
      }; 
      cell.setOnMousePressed(e -> { 
       if (! cell.isEmpty()) { 
        System.out.println("Click on "+cell.getItem()); 
       } 
      }); 
      return cell ; 
     }); 

     Scene scene = new Scene(new StackPane(combo), 300, 180); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

ich die Lambda-Ausdrücke sind nicht in dieser Sprache Ebene Fehler unterstützt. –

+0

@EerikMuuli Konfigurieren Sie entweder Ihre IDE so, dass Sie Java 8 verwenden, oder konvertieren Sie die Lambda-Ausdrücke in Klassen. –

+0

Danke! Es hat perfekt funktioniert! –