2011-01-02 14 views
2

Я пытаюсь сделать текст кратким, прежде чем он исчезнет. Было бы вдоль линий
1) Установить цвета на черный
2) Подождите й количество секунд
3) Набор цвета фонаТекст кратко отображается в JPanel

Метод я называю это перекрасить(), который затем звонки paintComponent (графический художник). repaint() вызывается только в том случае, если я нажимаю клавишу пробела.

Я думал о попытке repaint();Thread.sleep(1000);repaint(); (я поймать исключение прерывания, просто не показано), но это только вызывает paintComponent один раз в пространстве-бар.

Есть ли простой способ сделать это или это что-то, что немного сложно?

ответ

1

Вам необходимо переопределить метод рисования на панели и сделать его реализацией Runnable, чтобы вы могли отключить текст через несколько секунд. Вот некоторые примеры кода:

import java.awt.Color; 
import java.awt.Graphics; 
import java.io.Exception; 
import java.util.Timer; 
import java.util.TimerTask; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 


class MyPanel extends JPanel implements Runnable{ 

private final static String TEXT = "HELLO WORLD"; 
private boolean on = true; 

@Override 
public void paint(Graphics g) { 
    super.paint(g); 

    if(on){ 
    g.drawString(TEXT, 20, 20); 
    } 

} 

@Override 
public void run() { 
    for(int i = 0 ; i< 2 ; i++){ 
    paintImmediately(0, 0, getWidth(), getHeight()); 
    try { 
    Thread.sleep(5000); 
    } catch (InterruptedException e) { 
    e.printStackTrace(); 
    } 
    on = false; 
    } 
} 
} 

public class App { 

public static void main(String[] args) throws Exception { 

    JFrame f = new JFrame(); 
    final MyPanel p = new MyPanel(); 
    f.add(p); 
    f.setSize(100,100); 
    f.setVisible(true); 
    Thread t = new Thread(p); 
    t.start(); 
} 
} 
+1

Настраиваемая покраска выполняется путем переопределения метода paintComponent(), а не метода paint(). – camickr

2

Я хотел бы использовать Swing Timer запланировать отрисовку текста.

Кроме того, я бы просто использовал JLabel для отображения текста. Затем вы просто используете метод setText (...) для изменения текста по своему усмотрению, и компонент будет перерисовываться.