2012-02-08 44 views
0

我有一个Jpanel,我需要显示从文件中获取的文本。 但我必须逐字显示文字(每秒一个字)。我该怎么做? 我试图覆盖paintComponent方法,但它不能显示文本逐步..JPanel逐步显示文本

回答

1

您正在寻找计时器(摆动包中的一个)。假设你有字拆分部分准备好了,下面的伪代码片段是如何先后追加他们一个JTextArea一个例子:

ActionListener l = new ActionListener() { 
    @Override 
    public void actionPerformed(...) { 
     textArea.append(words.remove(0)); 
    } 
}; 
Timer timer = new Timer(1000, l); 
timer.start();  

如果你真的想绘制字符串手动自定义面板上,让它有追加方法,并呼吁在你的ActionListener,像

class MyPanel .... 
    String text; 
    public void append(String word) { 
     text += word; 
     repaint(); 
    } 
    @Override 
    protected void paintComponent(...) { 
     super.paintComponent(..); 
      // draw the string 
    } 
} 
1

也许是更好的方法,但在这种情况下,当然做JPanel的延长自己的JPanel,并覆盖公共无效漆(图形G),所以你需要与整个文本字符串,字符串的另一个数组,你可以叫myWords,其他字符串称为currentWords,最后一个计数器,算你把

的话,所以你需要先填写阵列的词,类似的,这可以在构造函数上,或者当它读取文件时

myWords = entireText.split(" "); 

,然后在paint方法,你的计时器内部时为1秒你把

currentWords+= myWords[counter+1]; 

最后你把

g.drawString(currentWords,0,0); 

最后0,0,是X,Y COORDS,所以也许你也需要控制这一点,把文本放在一个新的行

+0

我给它一个尝试,感谢您的hekp – 2012-02-08 12:56:03

+0

删除downvote - 整体描述是好的,只是suggeting错paint方法。它是_not_ paint(...)它的paintComponent(..) – kleopatra 2012-02-08 15:27:58