在JTextArea中键入文本效果

时间:2014-10-30 12:02:11

标签: java swing delay jtextarea

我正在制作一个有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){}
    }
}

但这不起作用。它会等待几秒钟而不显示任何内容,然后立即显示整个文本。请建议。

3 个答案:

答案 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();
}

检查上面的代码是否正常。