2017-01-16 66 views
1

我正在用java編寫一個小遊戲。爲此,我想打印一個包含文本的對話框 - 文本框,以便與遊戲中的人交談。Java圖形不能在定時器中工作

public static void printConBox(Graphics g, String firstLine, String secondLine, String thirdLine, String fourthLine){ 
    g.setColor(Color.WHITE); 
    g.fillRect(x, y, 600, 180); 
    g.setColor(Color.BLACK); 
    Timer timer = new Timer(); 
    timer.schedule(new TimerTask(){ 

     @Override 
     public void run() { 
      if(i <= firstLine.length() - 1){ 
       char c = firstLine.charAt(i); 
       i++; 
       String s = "" + c; 
       System.out.print(s); 
       g.drawString(s, xdif, y + 25); 
       xdif += 15; 
      }else{ 
       timer.cancel(); 
      } 
     } 

    }, 0, 100);} 

不要擔心圖形,這是工作,因爲程序正在繪製白色的文本框。但字符串'firstLine'中的字母不存在。在運行中,這應該是文本的動畫!

我認爲這與der Timer有關!但是輸出控制檯中的打印完美無缺!我還了Thread.sleep嘗試在for循環,但仍然沒有工作...

任何想法?...

PS:我用的paintComponent和,所以對顯卡工作相信我;)

+0

Graphics對象只在接收它的paint方法的持續時間內有效。您不能「保存」它以便以後在延遲計時器任務中使用。您的計時器必須更改相關數據,然後告訴組件重新繪製(部分)自身。請注意,由於線程問題,在使用AWT和Swing時最好使用javax.swing.Timer而不是java.util.Timer。 – VGR

+0

好的,謝謝,我會試試它:) :) – Caipi

回答

0
public void actionPerformed(ActionEvent e){ 
    if(Conversation.i <= firstLine.length() - 1){ 
     char c = firstLine.charAt(Conversation.i); 
     Conversation.i++; 
     String s = "" + c; 
     System.out.print(s); 
     g.drawString(s, Conversation.xdif, Conversation.y + 25); 
     Conversation.xdif += 15; 
     Conversation.timer.restart(); 
    }else{ 
     Conversation.timer.stop(); 
    } 
} 

但我怎麼得到圖形在der actionPerformed,計時器的作品與? 順便說一句,System.out工作安吉! Nice ...;)

+0

我解決了它:)特別感謝VGR,這是一個很大的幫助。如果有人也想看到解決方案,請在這裏添加評論... – Caipi