Java używanie repaint() w pętli czasowej

0

Problem może z goła banalny natomiast mam z tym problem. Próbuję napisać zwykły przesuwacz linii który wraz z przejściem timera rysuje linie w odpowiednim miejscu, Jednak zamiast odrysowywać kolejne linie poprzednie zostają :/

przynajmniej wiem jak narysować pasek postępu :P

oto kod z góry dzięki za pomoc

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jprzesun;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

/**
 *
 * @author w.maciejewski
 */
public class JOknoo extends JFrame implements ActionListener{

    private Jwykres jw;
    private Timer time;
    private  int pozycja=0;
    public JOknoo(){
        setSize(600,200);
        setVisible(true);
        jw =new Jwykres();
        time=new Timer(400,this);
        jw.dlugosc=398;
        getContentPane().add(jw,BorderLayout.CENTER);
        Dimension dim=getContentPane().getSize();
        jw.dim=dim;
        time.start();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        if(source==time){
            jw.pozycja2=pozycja;
            pozycja++;
            jw.repaint();
        }
        
    }
   
    
    
    private static class Jwykres extends JPanel {
        private Graphics2D bufor;
        private Color kolorlini=Color.DARK_GRAY;
        private Dimension dim;
        public int dlugosc;
        public int pozycja2;
         @Override
        
        public void paint( Graphics g ){
              if( g==null ) return;
               bufor = (Graphics2D)g;
               
          bufor.setPaintMode();
          bufor.setColor(kolorlini);
          Stroke drawingStroke = new BasicStroke(2);
          bufor.setStroke(drawingStroke);
          bufor.drawRect(0, 0, dim.width-1,dim.height-1);
          float stosunek=(float)dim.width/(float)dlugosc;
          double pom=stosunek*pozycja2;
          bufor.drawLine((int)pom, 0, (int)pom, dim.height);
          int[] xp={(int)pom-5,(int)pom+5,(int)pom};
          int[] yp={0,0,5};
          bufor.fillPolygon(xp,yp,3);
         }
    }
}

0

Musisz zmazać to co niepotrzebne. Najprostszy sposób, to wywołać w pierwszym wierszu metody paint

super.paint(g);
0

Nie wiem co ma robic ten program ale jak zamienisz jw.repaint(); na repaint(); to idzie pionowa linia w prawo :D.

0

generalnie o to chodziło ;-)

Dzięki za pomoc pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1