Java aggiunge l’effetto Typewriter a JTextArea

Ho bisogno di mostrare l’output a un JTextArea un carattere alla volta, con un leggero ritardo tra ogni personaggio. Il mio tentativo è il seguente:

private static void printInput(final String input) { Timer timer = new Timer(60,new ActionListener(){ public void actionPerformsd(ActionEvent e) { for(int i = 0; i<input.length(); i++) { messageArea.append(Character.toString(input.charAt(i))); } } }); } 

Ci sono domande simili, ma non ho potuto trovarne una con un esempio che potrei usare per capire il mio problema

Un Timer è uno pseudo loop, ovvero, fa scattare un ciclo dopo un ritardo predefinito, ogni ciclo è un’iterazione del ciclo e ogni iterazione è necessaria per aggiornare l’interfaccia utente e aggiornare il valore dell’iteratore.

Ora, poiché non mi piace lavorare nel contesto static , la prima cosa che suggerisco è di riassumere il concetto di base in una class separata. In questo modo puoi facilmente incapsulare lo stato

 public class TypeWriter { private Timer timer; private int characterIndex = 0; private String input; private JTextArea textArea; public TypeWriter(JTextArea textArea, String input) { this.textArea = textArea; this.input = input; timer = new Timer(60, new ActionListener() { @Override public void actionPerformsd(ActionEvent e) { if (characterIndex < input.length()) { textArea.append(Character.toString(input.charAt(characterIndex))); characterIndex++; } else { stop(); } } }); } public void start() { textArea.setText(null); characterIndex = 0; timer.start(); } public void stop() { timer.stop(); } } 

Quindi, questo è piuttosto semplice, tutto ciò che fa è, usando un Timer , controllare se ci sono altri caratteri che devono essere stampati, se c'è, prende il carattere successivo e lo aggiunge all'area di testo e aggiorna il valore iteratore. Se siamo alla fine del testo, si fermerà il Timer (cioè, la condizione di uscita)