2014-08-28 215 views
0

所以我有這個JavaFX應用程序,其中包含一個按鈕,應該打開DirectoryChooser onclick。當我觸發它一次,它做它應該做的事,非常好。只要我關閉DirectoryChooser對話框,該按鈕不會再做任何事情。我在網上搜索一些「事件重置」或類似的東西,因爲我想也許該事件仍然「活躍」,因此不會再觸發,但沒有任何結果:JavaFX按鈕事件只觸發一次

// first attempt 
button.addEventFilter(MouseEvent.MOUSE_CLICKED, 
    new EventHandler<MouseEvent>() { 
     public void handle(MouseEvent e) { 
      // dirChooser.setTitle("Select Directory:"); 
      file = dirChooser.showDialog(primaryStage); 

      // just incase only the DirectoryChooser wasn't opening 
      System.out.println("asdf"); 

      // updates the application view with the new selected path 
      update(); 

      // not sure, if this affects anything 
      // found it while looking for resetting of events 
      e.consume(); 
     }; 
    } 
); 
// secont attempt 
button.setOnAction(new EventHandler<ActionEvent>() { 
    @Override public void handle(ActionEvent e) { 
     DirectoryChooser dirChooser = new DirectoryChooser(); 
     dirChooser.setTitle("Select Directory:"); 
     file = dirChooser.showDialog(primaryStage); 
     update(); 
    } 
}); 

不知道這只是一個完全錯誤的方法,或者如果我錯過了重要的東西。我希望你們能弄明白。

+0

你是什麼意思的「按鈕不再做任何事情」?第二次和以後的點擊沒有觸發事件處理程序? – 2014-08-28 10:47:45

+0

那麼,DiaglogChooser沒有打開,沒有控制檯輸出,似乎沒有調用句柄函數。所以是的,它沒有被觸發。 – 2014-08-28 11:09:21

+0

爲了調試目的,你可以註釋掉代碼中的dirChooser(和update())行,然後再次點擊。有沒有控制檯輸出? – 2014-08-28 11:22:21

回答

0

所以在Uluk Biy的幫助下,我得到了這個問題。在更新例程中,該按鈕是新創建的,因此它的事件處理程序不再存在。我將這個按鈕添加到屬性中,所以我不需要每次調用更新例程時都替換它,並且事件處理程序仍然存在。

相關問題