2016-05-08 95 views
-1

例如,如果我按下鍵「1」幾秒鐘,我的JTextArea中的結果將爲「1111111111111」。如何在連續按鍵時停止按鍵重複?

有沒有辦法在一個字符後停止它?

+3

肯定的,但如果有人想按住鍵?你將打破某些確定的用戶體驗期望。你爲什麼需要這種方法?你想解決什麼問題? – KevinO

+0

我有一個計算器,我根本不需要這個功能。 –

+3

讓用戶決定如何將數據輸入到文本區域。以此評論框爲例。對我來說,按住111111111111111是沒有意義的,但評論框允許。不要擔心這樣的小事。 (1-)。 – camickr

回答

2

如果我正確地理解了這個問題,您可以使用DocumentFilter來做這件事,並且只允許插入文本,假設按鍵的延遲時間高於0.5秒。

例子:

import javax.swing.JFrame; 
import javax.swing.JTextArea; 
import javax.swing.text.AbstractDocument; 
import javax.swing.text.AttributeSet; 
import javax.swing.text.BadLocationException; 
import javax.swing.text.DocumentFilter; 

public class Example { 

    public Example() { 
     JTextArea textArea = new JTextArea(); 
     ((AbstractDocument) textArea.getDocument()).setDocumentFilter(new DocumentFilter() { 
      String lastStr = ""; 
      long time = System.currentTimeMillis(); 

      @Override 
      public void replace(FilterBypass fb, int offset, int length, String str, AttributeSet attr) 
        throws BadLocationException { 
       long delay = System.currentTimeMillis() - time; 
       time = System.currentTimeMillis(); 
       if (str.equals(lastStr) && delay <= 500) { 
        return; 
       } 
       lastStr = str; 
       super.replace(fb, offset, length, str, attr); 
      } 
     }); 

     JFrame frame = new JFrame(); 
     frame.setContentPane(textArea); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(800, 600); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Example(); 
    } 
} 
0

有一個容器,(HashSet的,ArrayList中,不管你喜歡),並有期待類似這樣的僞代碼按鍵方法/釋放

add: 
    if(!list.contains("key to enter")) addKey(); 

remove: 
    if(list.contains("key to remove")) removeKey(); 
在你的方法結束

然後,更新文本區域與列表中的數據。