import javafx.application.Application; 
import javafx.collections.ListChangeListener; 
import javafx.scene.Scene; 
import javafx.scene.control.ComboBox; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.input.TouchEvent; 
import javafx.scene.layout.Pane; 
import javafx.stage.PopupWindow; 
import javafx.stage.Stage; 
import javafx.stage.Window; 
//import com.sun.javafx.stage.StageHelper;  // for JDK 8


public class JFXTouchTest { 

    public static void main(String[] args) { 
        Application.launch(JFXApp.class, args); 
    } 

    public static class JFXApp extends Application implements ListChangeListener<Window> { 

        @Override 
        public void start(Stage primaryStage) { 
            primaryStage.addEventFilter(TouchEvent.ANY, e -> System.out.println("touch event: " + e.getEventType())); 
            primaryStage.addEventFilter(MouseEvent.ANY, e -> System.out.println("mouse event: " + e.getEventType())); 
            final ComboBox<String> comboBox = new ComboBox<>(); 
            comboBox.getItems().addAll("Test1", "Test2", "Test3"); 
            primaryStage.setScene(new Scene(new Pane(comboBox))); 
            primaryStage.setWidth(800); 
            primaryStage.setHeight(800); 
            primaryStage.show(); 
            Window.getWindows().addListener(this); 
			//StageHelper.getStages().addListener(this);
        } 

        @Override 
        public void onChanged(Change<? extends Window> c) { 
            if (!c.next()) return; 
            for (Window w : c.getAddedSubList()) { 
                if (w instanceof PopupWindow) { 
                    w.addEventFilter(TouchEvent.ANY, 
                            e -> System.out.println("touch event (PopupWindow): " + e.getEventType())); 
                    w.addEventFilter(MouseEvent.ANY, 
                            e -> System.out.println("mouse event (PopupWindow): " + e.getEventType())); 
                    Window.getWindows().removeListener(this); 
					//StageHelper.getStages().removeListener(this);
                } 
            } 
        } 
    } 
} 
