2015-09-03 1 views
0

Итак, у меня есть этот код ниже, и я пытаюсь обновить текст на экране, чтобы показать текущее время. До сих пор я пытался использовать drawRect в качестве способа очистки, но текст оставался там, а не обновлялся. super.paint тоже не работает. Кроме того, я бы включил это новое заявление в методы init() или paint()?Java Applet, не очищающий текст на экране

import java.awt.*; 
import java.util.*; 
import java.util.concurrent.TimeUnit; 
import java.awt.*; 
import java.awt.font.*; 

import javax.swing.*; 

import java.awt.geom.*; 
public class HelloWorldApplet extends javax.swing.JApplet { 
Calendar now = Calendar.getInstance(); 
int second = now.get(Calendar.SECOND); 
int hour = now.get(Calendar.HOUR_OF_DAY); 
int minute = now.get(Calendar.MINUTE); 
int month = now.get(Calendar.MONTH) + 1; 
int day = now.get(Calendar.DAY_OF_MONTH); 
int year = now.get(Calendar.YEAR); 
String greeting; 
String currentTime = ("The time currently is: " + hour + ":" + minute + " and" + second + " seconds"); 
String currentDate = ("Date: " + month + "/" + day + "/" + year); 


public void init() { 
    greeting = "Hello World"; 
    Font myFont = new Font("TimesRoman", Font.BOLD, 20); 
    // set the component or graphics object like this: 
    setFont(myFont); 

} 
public void paint(Graphics screen){ 

     Graphics2D screen2D = (Graphics2D) screen; 
     screen2D.drawString(greeting, 20, 50); 
     screen2D.drawString(currentTime, 20, 75); 
     screen2D.drawString(currentDate, 20, 100); 
     try { 
      Thread.sleep(1000); 
     } catch (InterruptedException e) { 
     //DoNothing. Pretend it didnt happen... 
     } 




} 
public void setup(Graphics screen) { 
    for (int x = 1; x < 2000000000;) { 
     x++; 
     repaint(); 

} 
} 

}

+1

"программы качели должны переопределить' paintComponent() 'вместо' переопределение краски() '." - [* Картина в AWT и Swing: Методы Paint *] (HTTP: // WWW. oracle.com/technetwo гк/Java/живопись-140037.html # обратных вызовов). Не спать на EDT; _do_ см. [* Использование таймеров Swing *] (http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html). – trashgod

ответ

2

@trashgod уже пояснялось самые важные вещи, но я буду повторять их в своем ответе, так что более полный


  1. Override paintComponent(), не paint()
  2. Создайте новый класс JPanel, который сделает картину для вас
  3. Получить время в методе paintComponent(), или он всегда будет оставаться той же
  4. Используйте таймер вместо того, чтобы спать это событие диспетчерская Пропустите
  5. вызов super.paintComponent(), чтобы очистить экран

Так вот фиксированный код:

import java.awt.*; 
import java.util.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JPanel; 
import javax.swing.Timer; 


public class HelloWorldApplet extends javax.swing.JApplet { 

    String greeting; 

    Font myFont = new Font("Times New Roman", Font.BOLD, 20); 

    public void init() { 

     greeting = "Hello World"; 

     add(new MyPanel()); 

     ActionListener actionListener = new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 

       repaint(); 

      }  
     }; 

     Timer timer = new Timer(500, actionListener); 
     timer.start(); 


    } 

    class MyPanel extends JPanel { 

     public void paintComponent(Graphics screen) { 

      super.paintComponent(screen); 

      Calendar now = Calendar.getInstance(); 
      int second = now.get(Calendar.SECOND); 
      int hour = now.get(Calendar.HOUR_OF_DAY); 
      int minute = now.get(Calendar.MINUTE); 
      int month = now.get(Calendar.MONTH) + 1; 
      int day = now.get(Calendar.DAY_OF_MONTH); 
      int year = now.get(Calendar.YEAR); 

      String currentTime = ("The time currently is: " + hour + ":" + minute 
        + " and " + second + " seconds"); 
      String currentDate = ("Date: " + month + "/" + day + "/" + year); 

      setFont(myFont); 

      Graphics2D screen2D = (Graphics2D) screen; 
      screen2D.drawString(greeting, 20, 50); 
      screen2D.drawString(currentTime, 20, 75); 
      screen2D.drawString(currentDate, 20, 100); 

     } 

    } 


} 
+0

Спасибо @LuxxMiner. Я знал, что делаю что-то не так, просто не знаю, что. – Tmanzz122