java - JavaFX 中使用计时器计算按钮点击次数

标签 java javafx timer

我正在尝试使用键盘输入来模拟短信应用程序,就像在旧手机中您必须单击 f.e.按钮“2”两次输入字母“b”,三次输入“c”等。我有几个按钮,对于每个按钮,我需要设置某种延迟,以便我可以根据需要多次单击字母或符号。我知道 java.util.Timer 在这里可以很方便,但我不明白如何在这种情况下应用它,以及如何仅在第一次单击“按钮”而不是每次单击“按钮”后才打开延迟。 下面是我在代码中使用的示例 FXML 元素以及单击按钮时调用的方法。

...
@FXML
Button button_2;

...

public void handleButton2(){
    //Code to execute to count clicks ?
    ...
    //Array of Strings instead of Characters to use .appendText without parsing
    String []letters = {"a", "b", "c", "2"};
    sms_text_area.appendText(letters[/*index of letter*/]);
}
...

最佳答案

请注意,您只想更改最后单击的按钮所代表的字符串。

一般来说,要在延迟后执行某些操作,请使用 PauseTransition

所以只需引入一些额外的字段:

private Button lastButtonClicked ;
private int buttonClickCount ;

private final PauseTransition buttonPressDelay 
    = new PauseTransition(Duration.seconds(0.5));

然后

public void handleButton2(){

    String[] letters = {"a", "b", "c", "2"};

    buttonPressDelay.setOnFinished(e -> {
        sms_text_area.appendText(letters[buttonClickCount]);
        lastButtonClicked = null ;
    });

    if (lastButtonClicked == button_2) {
        buttonClickCount = (buttonClickCount + 1) % letters.length ;
    } else {
        buttonClickCount = 0 ;
    }
    buttonPressDelay.playFromStart();
    lastButtonClicked = button_2 ;
}

关于java - JavaFX 中使用计时器计算按钮点击次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42316203/

相关文章:

java - 获取应用程序正常运行时间

java - 从文件中读取字符

javafx - javafx gui中闪烁的标签

android - 继续查询时间直到匹配给定时间

javascript - ionic : $timeout action is being executed even if it is cancelled

java - 无法使用 java 从 yahoo API 获取 OAuth 2.0 访问 token

java - Groovy ArrayList 对字符串感到困惑

JavaFX:使用自定义样式表将文本颜色应用于 TableCell?

java - 使用自定义类和比较器时设置 ObservableList 的类型

c++ - 使用 std::chrono 计算持续时间在需要很长时间时给出 0 纳秒