簡體   English   中英

從沒有FXML的另一個類訪問Javafx元素

[英]Access to Javafx elements from another class without FXML

我正在使用Javafx8,可以說我創建了許多ui項目(例如按鈕等)。 我認為將這些按鈕的所有EventHandler放入單獨的類中是一個好主意。 我的問題是:我如何從EventHandler訪問任何按鈕,例如禁用它或以任何其他方式對其進行操作。

這是帶有兩個按鈕和一個單獨的EventHandlers類的最小示例

假設這是我的Start課:

public class App extends Application
{
    @Override
    public void start(Stage primaryStage) throws Exception {
        Button b1 = new Button();
        b1.setOnAction(ListenerClass.createB1Event());
        Button b2 = new Button();
        b2.setOnAction(ListenerClass.createB2Event());

        VBox vbox = new VBox(b1, b2);

        Scene scene = new Scene(vbox, 200, 200);

        primaryStage.setTitle("App");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main( String[] args )
    {
        Application.launch(args);
    }
}

和我的(單獨的)偵聽器類:

public class ListenerClass {

    public static EventHandler<ActionEvent> createB1Event() {
        return new EventHandler<ActionEvent>() {
            public void handle(ActionEvent t) {
                //Access here to b1 and b2...
                //Deactivate B1
                //Activate B2
            }
        };
    }

    public static EventHandler<ActionEvent> createB2Event() {
        return new EventHandler<ActionEvent>() {
            public void handle(ActionEvent t) {
                //Access here to b1 and b2...
                //Activate B1
                //Dectivate B2
            }
        };
    }
}

謝謝

所以根據您的校長。 您希望禁用位於vbox中並被按下的按鈕,並啟用該vbox中的所有其他按鈕。 而你的問題是如何找到被按下的按鈕。

您需要使用ActionEvent.getSource()方法。

這是我的編碼方式。

這是Start類:

public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
    VBox vbox = new VBox();
    Button b1 = addNewButton("Button1",vbox);
    Button b2 = addNewButton("Button2",vbox);
    Button b3 = addNewButton("Button3",vbox);


    Scene scene = new Scene(vbox, 200, 200);

    primaryStage.setTitle("App");
    primaryStage.setScene(scene);
    primaryStage.show();
}

public static Button addNewButton(String label, VBox ownerVBox){
    Button button = new Button(label);
    ownerVBox.getChildren().add(button);
    button.setOnAction(ListenerClass.createBEvent());
    return button;
}


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

偵聽器類:

public class ListenerClass {

public static EventHandler<ActionEvent> createBEvent() {
    return new EventHandler<ActionEvent>() {
        public void handle(ActionEvent t) {
            Button b = (Button) t.getSource();
            VBox vbox =(VBox) b.getParent();
            vbox.getChildren().forEach(button-> {
                button.setDisable(false);
            });
            b.setDisable(true);
        }
    };
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM