【问题标题】:javafx add additional action to buttonjavafx 向按钮添加附加操作
【发布时间】:2018-02-18 12:02:15
【问题描述】:

你能帮我解决这个问题吗?

我在Cell 类中创建按钮,并向该按钮添加一些默认操作。

public class Cell {
    private Button button;

    public Cell() {
        this.button = new Button();
        this.button.setOnAction(e -> System.out.println("Default action"));
    }

    public Button getButton() {
        return button;
    }
}

Game 类中,我想向此按钮添加其他操作,但我也想保留默认操作。

public class Game {

    public Game(Button button) {
        // this add new action to button but delete previous one
        // I want use both actions
        button.setOnAction(e -> System.out.println("additional action"));
    }
}

我知道新操作会覆盖之前的操作。所以如果我点击按钮,它只会打印additional action

public class Main extends Application{

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        Cell cell = new Cell();
        Button button = cell.getButton();
        Game game = new Game(button);
        VBox vBox = new VBox(button);
        Scene scene = new Scene(vBox);
        primaryStage.setScene(scene);
        primaryStage.show();

    }
}

是否可以向按钮添加新动作并保留以前的动作?

【问题讨论】:

  • 想要达到什么目的?如果你想要两个动作,为什么不在一个动作中写呢??

标签: java button javafx


【解决方案1】:

您可以在设置新动作之前获取当前动作,并同时调用旧动作和新动作:

public Game(Button button) {
    EventHandler<ActionEvent> current = button.getOnAction();
    button.setOnAction(e -> {
        current.handle(e);
        System.out.println("additional action");
    });
}

【讨论】:

    【解决方案2】:

    JavaFX 已内置支持将多个处理程序附加到一个事件。检查addEventHandlersetEventHandler 的文档(当您调用任何setOn 前缀方法时会调用它)。要记住的一件事是addEventHandler 附加的处理程序将在setOn 方法之前触发,即setOnAction 附加的处理程序将最后触发。您可以将 Game 更改为以下内容:

    public class Game {
    
      public Game(Button button) {
        // this add new action to button but delete previous one
        // I want use both actions
        button.addEventHandler(ActionEvent.ACTION, e -> System.out.println("additional action"));
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-23
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      • 1970-01-01
      相关资源
      最近更新 更多