我如何以编程方式从另一种方法单击 JavaFX 中的按钮?

Posted

技术标签:

【中文标题】我如何以编程方式从另一种方法单击 JavaFX 中的按钮?【英文标题】:How would I programmatically click a button in JavaFX from another method? 【发布时间】:2015-06-03 21:58:57 【问题描述】:

我有一个监听器类,它通过网络连接到我的手机中,以接收来自名为 TouchOSC 的应用程序的输入。在那个课程中,只要我按下手机上的按钮,我就可以调用方法。我需要做的是,只要我的计算机从手机接收到输入,就单击 JavaFX 按钮以触发该方法中的事件。我怎么会触发这样的事情?

【问题讨论】:

【参考方案1】:

button.fire()

当用户手势指示此 ButtonBase 的事件应该发生时调用。

当一个按钮被触发时,该按钮的onAction 事件处理程序被调用。

按钮的动作,每当触发按钮时都会调用该动作。这可能是由于用户使用鼠标单击按钮、触摸事件或按键按下,或者开发人员以编程方式调用了 fire() 方法。

示例代码

创建一个按钮并自动触发它四次。

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;

import java.io.IOException;
import java.util.stream.IntStream;

public class RapidFire extends Application 
    private static int nClicks = 0;

    @Override
    public void start(Stage stage) throws IOException 
        // setup button and action handler.
        Button button = new Button("Click Me!");
        button.setOnAction(event -> 
            nClicks++;
            System.out.println("Clicked " + nClicks + " times.");
        );
        button.setPadding(new Insets(10));
        button.setPrefWidth(100);

        // show the button.
        stage.setScene(new Scene(button));
        stage.show();

        // fire the button a few times in succession.
        IntStream.range(0, 4).forEach(
                i -> button.fire()
        );
    

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

样本的输出是:

Clicked 1 times.
Clicked 2 times.
Clicked 3 times.
Clicked 4 times.

【讨论】:

这不起作用。 Fire 不会触发我在其他方法中设置的 Action 事件。 为我工作。除非我误解了您的问题,否则您的代码中可能存在其他问题,导致它无法按预期工作。 @DylanLeeBlanchard:小心实现 button.setOnAction()。我犯了一个错误,我在 button.setOnMouseClicked() 上实现了事件处理程序。

以上是关于我如何以编程方式从另一种方法单击 JavaFX 中的按钮?的主要内容,如果未能解决你的问题,请参考以下文章

我如何从另一种方法调用 linq?

如何在一种方法中为数组赋值并从另一种方法调用

JavaFX:以编程方式展开组合框

如何从另一种方法访问 tableviewCell 中的文本字段

如何以编程方式单击 WPF 中的按钮?

如何从另一种方法访问 StorageFile