JPanel逐步显示文本

时间:2012-02-08 11:42:06

标签: swing jpanel jlabel

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

2 个答案:

答案 0 :(得分:1)

也许是更好的方法,但在这种情况下,让你自己的JPanel当然扩展JPanel,并覆盖 public void paint(Graphics g),所以你需要一个包含整个文本的String,你可以调用myWords的另一个String数组,其他名为currentWords的String,最后是一个计算你放的单词的计数器

所以你需要首先填充单词数组,比如,这可以在构造函数上,或者当它读取文件时

myWords = entireText.split(" ");

然后在paint方法中,在你的计时器内放置1秒钟

currentWords+= myWords[counter+1];

最后你把

g.drawString(currentWords,0,0);

最后的0,0,是X,Y坐标,所以也许你需要控制它,把文字放到一个新的行

答案 1 :(得分:1)

您正在寻找Timer(swing包中的那个)。假设您已准备好分词部分,以下伪代码片段是如何将它们连续附加到JTextArea的示例:

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

如果你真的想在自定义面板上手动绘制String,让它有一个append方法并在你的actionListener中调用它,比如

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