当前位置: 首页 > 知识库问答 >
问题:

javafx向按钮添加附加动作

濮阳旺
2023-03-14

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

我在类<code>单元格</code>中创建按钮,并向该按钮添加一些默认操作。

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;
    }
}

在< code>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"));
    }
}

我知道新操作覆盖了以前的操作。因此,如果我单击按钮,它只会打印附加操作

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();

    }
}

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

共有2个答案

澹台硕
2023-03-14

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"));
  }

}
匡旭东
2023-03-14

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

public Game(Button button) {
    EventHandler<ActionEvent> current = button.getOnAction();
    button.setOnAction(e -> {
        current.handle(e);
        System.out.println("additional action");
    });
}
 类似资料:
  • 问题内容: 我有五个按钮,是动态创建的。我的目标是:单击任何按钮以向其中添加活动类,当然还有其他任何人可以通过该活动类将其删除。我该如何实现? 问题答案: 您需要将状态引入组件并在事件处理程序中进行设置。例如render方法的输出: 事件处理程序(元素方法):

  • 我已经用FXML定义了一个tableview。它类似于以下内容: Action列将在每一行中包含带有文本“Delete”的按钮。我有两个问题: 如何将此删除按钮添加到JavaFX中的每一行最后一个单元格? 如何获取已单击“删除”按钮的行的索引?(以便删除该行或进行其他事件处理工作)

  • 我在Eclipse Oxygen.1a发行版(4.7.1a)中使用JavaFX构建了一个桌面应用程序,这将是我的第一个应用程序。我创建了一个名为PersonOverview.fxml的文件,并在代码中添加了以下代码; JavaFX Scene Builder 2.0似乎无法识别元素- 我想知道是否有一个替代方案。我想在GUI的右下方添加一组按钮到GUI中。类似这样的东西;

  • 我正在试用新的dataview组件,我正在使用这个Sencha示例: http://www.sencha.com/blog/dive-into-dataview-with-sencha-touch-2-beta-2/ 在基顿列表项中,我删除了图像,现在我想添加三个按钮,上面写着:“电子邮件”、“脸书”和“推特”,而不是商店中的值。当用户点击每个按钮时,我想显示每个按钮各自的存储值。如何才能做到这一

  • 我正在使用android 2.1,希望在Mapsavity上添加一个后退按钮。我在这一页上尝试了什么[在操作栏上显示后退按钮,但应用程序崩溃。我已经按照另一个论坛的建议将extends FragmentActivity替换为AppCompatActivity,但应用程序仍然崩溃。我知道这与操作栏有关,因为如果我删除它,应用程序就会工作。操作栏似乎为空。我被卡住了,已经启动了应用程序数次。下面是错误

  • 一个解决方案是(如果我读对了的话)添加一个任意的JPanel,在这个例子中是一个标签。我的问题是在消息窗口中需要一个JComboBox对象,并且(与解决coffee_table的问题相同)使用JComboBox似乎删除了取消按钮。如果我将YES_NO_CANCEL_OPTION替换为OK_CANCEL_OPTION或question_message并不重要。 对于JOptionPane家族,我仍然