2016-05-08 9 views
-1

Zum Beispiel, wenn ich die Taste "1" für einige Sekunden gedrückt habe, wird das Ergebnis in meinem JTextArea "1111111111111" sein.Wie kann man die Tastenwiederholung bei fortlaufendem Tastendruck anhalten?

Gibt es eine Möglichkeit, es nach einem Zeichen zu stoppen?

+3

ja, aber was ist, wenn jemand will, die Taste gedrückt halten? Sie werden bestimmte UX-Erwartungen brechen. Warum brauchen Sie diesen Ansatz? Welches Problem versuchen Sie zu lösen? – KevinO

+0

Ich habe einen Taschenrechner und ich brauche diese Funktion überhaupt nicht. –

+3

Lassen Sie den Benutzer entscheiden, wie Sie Daten in den Textbereich eingeben. Nehmen Sie zum Beispiel dieses Kommentarfeld. Es macht keinen Sinn, die 111111111111111 zu halten, aber die Kommentarbox erlaubt es. Mach dir keine Sorgen über etwas so Triviales. (1-). – camickr

Antwort

2

Wenn ich das Problem richtig verstehe, könnten Sie eine DocumentFilter dafür verwenden, und erlauben Sie nur den Text eingefügt werden, wenn sagen wir die Verzögerung der Tastendruck über 0,5 Sekunden ist.

Beispiel:

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

Haben Sie einen Behälter, (HashSet, Arraylist, was auch immer Sie mögen), und Methoden für die Tastendrücke/releases

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

remove: 
    if(list.contains("key to remove")) removeKey(); 

dann am Ende Ihrer Methoden zu diesem Pseudo-Code ähnlich aussehenden, aktualisieren Sie den Text Bereich mit den Daten aus der Liste.

Verwandte Themen