我正在制作一个有JTextArea的程序。我使用 append()方法向其添加文本。我希望文本就像有人在JTextArea中键入,即它应该键入一个字符,然后等待400毫秒,下一个字符,然后再等待,依此类推。 这是我的代码:
public void type(String s)
{
char[] ch = s.toCharArray();
for(int i = 0; i < ch.length; i++)
{
// ta is the JTextArea
ta.append(ch[i]+"");
try{new Robot().delay(400);}catch(Exception e){}
}
}
但这不起作用。它会等待几秒钟而不显示任何内容,然后立即显示整个文本。请建议。
答案 0 :(得分:4)
请改用javax.swing.Timer
。继续引用JTextArea
实例和char索引。在每次actionPerformed()
调用时,将当前字符附加到JTextArea
。当char索引等于char数组长度时,停止Timer
答案 1 :(得分:0)
尝试使用此功能,在此之前替换for循环:
int i=0;
while(i<s.length())
{
// ta is the JTextArea
ta.append(s.charAt(i));
try
{
Thread.sleep(400);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
i++;
}
修改强>
我刚编辑它以避免线程问题:
int i=0;
while(i<s.length())
{
// ta is the JTextArea
ta.append(s.charAt(i));
try {
TimeUnit.MILLISECONDS.sleep(400);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
}
答案 2 :(得分:-2)
public void type(final String s)
{
new Thread(){
public void run(){
for(int i = 0; i < s.length(); i++)
{
// ta is the JTextArea
ta.append(""+s.charAt(i));
try{Thread.sleep(400);}catch(Exception e){}
}
}
}.start();
}
检查上面的代码是否正常。