2015-08-20 46 views
0

禁用觸摸事件我有與Windows 8的觸摸事件的問題JavaFX應用程序。出於某種原因,當用戶在某些情況下觸摸應用程序窗口時會發生崩潰。我想完全禁用觸摸事件和恢復,而不是常規的左擊(我不使用任何花哨的手勢)。如何在JavaFX的

如何告訴JavaFX如何處理觸摸事件,如同常規鼠標點擊一樣?

回答

1

這將是有益知道你看到什麼樣的崩潰(堆棧跟蹤或轉儲,Java版本,等等),因爲觸摸事件應在Java中8做工精細至於您的活動重定向問題,你可能想試試這個:

在最頂端的節點(例如您的主要階段)中添加一個TouchEvent.ANY EventFilter並使用它(這將在冒泡到其目標之前消耗所有觸摸事件),消耗後您可以將事件轉發爲新MouseEvent(例如MouseClick)。請參見本示例:

import javafx.event.Event; 
import javafx.event.EventHandler; 
import javafx.scene.input.MouseButton; 
import javafx.scene.input.MouseEvent; 
import javafx.scene.input.TouchEvent; 
import javafx.scene.input.TouchPoint; 


primaryStage.addEventFilter(TouchEvent.ANY, new EventHandler<TouchEvent>() { 
      @Override 
      public void handle(TouchEvent event) { 
       // Consume the touch event 
       event.consume(); 

       // Create a fake MouseEvent (MOUSE_CLICKED) for the current touch event 
       TouchPoint touchPoint = event.getTouchPoint(); 
       int clickCount = 1; 
       MouseEvent mouseEvent = new MouseEvent(event.getSource(), event.getTarget(), 
         MouseEvent.MOUSE_CLICKED, touchPoint.getX(), touchPoint.getY(), touchPoint 
           .getScreenX(), touchPoint.getScreenY(), MouseButton.PRIMARY, 
         clickCount, false, false, false, false, true, false, false, true, false, 
         false, null); 

       // Fire the fake event 
       Scene yourScene = primaryStage.getScene(); 
       Event.fireEvent(yourScene.getRoot(), mouseEvent); 
      } 
}); 

您可能需要一些額外的檢查/邏輯添加到代碼能夠發送基於在的TouchEvent類型不同MouseEvents。但是,我建議在嘗試這樣的事情之前嘗試找到當前崩潰的根本原因。

希望這會有所幫助!

+0

感謝您的幫助。其實,我沒有找到失事的根源,它在某種程度上似乎是完全無關的,但它固定的崩潰。另外,我不能發佈任何錯誤,因爲沒有錯誤,整個jvm都崩潰了。謝謝你的回答,非常感謝。 – Hassan

+0

我很高興你固定的崩潰!此FX事件重定向一定會在未來幫助您(或其他人)..我已證明對於將某些事件從Swing重定向到FX非常重要。 – JavierJ