2017-02-18 303 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

我無法記住這些電話上的短信如何工作:)。看到更新,但我不認爲這是正確的.... –