在JavaFX中使用计时器计数按钮单击

时间:2017-02-18 14:10:53

标签: 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*/]);
}
...

1 个答案:

答案 0 :(得分:1)

请注意,您只想更改按钮所代表的字符串(如果它是最后一次单击的字符串。

一般情况下,要在延迟后执行某些操作,请使用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 ;
}