Создание таймера и запуск его внутри paintComponent()
- проблема.paintComponent()
- это метод, который вызывается очень часто.Итак, ваш timer
создается много раз снова и снова.
Вам нужно создать таймер и запустить его только один раз.
Я получил ваш полный код и внес несколько изменений.Я думаю, что теперь это работает.Смотрите мои комментарии в коде.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class New extends JFrame{
MyComponent komponent;
int z=1;
Timer timer;
class MyComponent extends JComponent{
@Override
protected void paintComponent(Graphics g2){
Graphics2D g = (Graphics2D)g2;
RenderingHints rh = new RenderingHints(
RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHints(rh);
//Prasad: Removed the timer from here
draw(g);
}
private void draw(Graphics2D g){
Font myFont = new Font ("Courier New", 1, 30);
g.setFont(myFont);
g.setColor(Color.BLACK);
g.drawString(Integer.toString(z),0,30);
}
}
public New(String string) {
super(string);
setDefaultCloseOperation(EXIT_ON_CLOSE);
Toolkit kit=Toolkit.getDefaultToolkit();
Dimension d=kit.getScreenSize();
setBounds(d.width/4, d.height/4, d.width/2, d.height/2);
add(komponent=new MyComponent());
//Prasad: Moved the timer here
timer=new Timer(500,new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
komponent.repaint(); //Prasad: Just call repaint()
z++;
}
});
timer.start();
setVisible(true);
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new New("New");
}
});
}
}