我正在尝试使用键盘输入来模拟短信应用程序,就像在旧手机中您必须单击 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/