2017-04-22 38 views
0

。我一直在尋找這個問題,但我還沒有在這裏找到它,所以我想這真的很簡單。如何僅使用一個事件處理類爲JavaFX中的同一個節點處理多個事件?每個人都有

我用一個按鈕在JavaFX中創建了一個非常簡單的應用程序。現在我想處理它的事件(比如當它被按下或者它被釋放時),但是當我看到互聯網上的例子時,它們都使用匿名類(每個事件都使用不同的類),這使得代碼變得很髒。這就是爲什麼我想把事件處理程序放在一個單獨的類中並將它們添加到按鈕中的原因。

問題是,我不知道是否必須爲每個事件創建不同的類,我認爲這不是很酷。所以我想出了一個主意。在類的handle()方法中,我檢查哪種類型的事件正在進行並處理它。 這是代碼

主類

public class Main extends Application{ 

    Button button; 
    PruebaEventHandler evhandler; 

    public Main() { 
    } 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     primaryStage.setTitle("h0i"); 

     button = new Button("Púlsame!"); 
     evhandler = new PruebaEventHandler(); 
     button.addEventHandler(MouseEvent.ANY, evhandler); 
     StackPane layout = new StackPane(); 
     layout.getChildren().add(button); 

     Scene scene = new Scene(layout, 300, 250); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
} 

EventHandler類

public class PruebaEventHandler implements EventHandler<MouseEvent>{ 
    @Override 
    public void handle(MouseEvent event){ 
     if(event.getEventType().equals(MouseEvent.MOUSE_PRESSED)){ 
      System.out.printf("Te cogí\n"); 
     } 
     if(event.getEventType().equals(MouseEvent.MOUSE_RELEASED)){ 
      System.out.printf("\nMe ha soltado!!!"); 
     } 
    } 
} 

我不知道這是非常低效的或壞的編程風格,但是是唯一的我到目前爲止已經提出瞭解決方案。所以我想問問你這是一個很好的解決方案,還是如果有更好的解決方案,就把我的光芒放在眼裏!事先感謝。

+0

有什麼不對您的實現。你可以使用一個switch語句,否則,如果哪一個更有效。這個問題可能是主題。 – Sedrick

回答

-1

已經有一個解決方案,它創建一個帶有FXML文件,Controller和Main類的JavaFX項目。像IntelliJ和NetBeans這樣的IDE支持讓你創建一個JavaFX項目,它會自動爲你創建這些文件,但我不確定是否需要添加一個插件才能使它工作,我不記得。

FXML文件負責GUI,例如在場景中放置一個按鈕,最簡單的使用方法是使用SceneBuilder,Oracle可以將它集成到IDE中。

如果您使用FXML,您可以將按鈕指向FXML文檔中的方法,因此您不需要爲事件處理程序提供匿名類。相反,您可以在您的Controller類中將按鈕調用爲特定的方法。

這裏有幾個YouTube上的教程,展示使用JavaFX與FXML的基礎: https://www.youtube.com/watch?v=K7BOH-Ll8_g https://www.youtube.com/watch?v=LMdjhuYSrqg

相關問題