2012-02-08 51 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