2017-02-18 302 views
0

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

... 
@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

请注意,您只想要更改该按钮代表,如果它是最后一个点击的字符串。

通常,要延迟执行某些操作,请使用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 ; 
} 
+0

是的,但这样一来我还需要额外的控制器,以实际得到的计数次数,我问一个办法设置呼叫处理方法的延迟时间。因此,代码首先计算点击次数,然后自动调用处理程序,而无需任何其他用户交互。 I.E.点击两次按钮“2”,约半秒后控制器获得点击次数并附加带有点击次数索引的字母。 –

+0

对不起,点击“回车”提前,更新了评论。 –

+0

我无法记住这些电话上的短信如何工作:)。看到更新,但我不认为这是正确的.... –