Nach scrollen verschwindet das zuvor im JPanel gezeichnete

Sermonx

Neues Mitglied
Hallo zusammen,

ich versuche recht einfach ein paar Vierecke auf ein Jpanel zu zeichnen und das ganze dann scrollbar anzuzeigen. Hierfür habe ich eine neue Klasse von JPanel abgeleitet und die paintComponet() Methode überschrieben. Das neue Jpanel Objekt übergebe ich dann an ein JScrollpane.

Die Anzeige klappt auch soweit. Jedoch verschwinden die zuvor gezeichneten Vierecke nachdem ich vor und wieder zurück scrolle.

Hat jemand eine Idee was ich falsch mache? Ich habe hierzu schon einige Threads gelesen diese bezogen sich aber immer auf Bilder. Ich wäre für eure Hilfe sehr sehr Dankbar

Hier der bisherige Code:

Java:
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;

/**
*
* @author 
*/
public class Zeichnen {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       
       
    DrawPanel dp = new DrawPanel();
    dp.setPreferredSize(new Dimension(1024, 720));
  
   
    JScrollPane sp = new JScrollPane(dp);
    sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
    //sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    sp.setWheelScrollingEnabled(true);
   
   
    JFrame f = new JFrame();
    f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    f.setSize(new Dimension(800, 600));
    f.setResizable(false);
    f.add( sp );
  
    f.setVisible( true );
       
       
       
        // TODO code application logic here
    }
   
}
class DrawPanel extends JPanel {
   
    private int x=10,y=0;


  @Override
  protected void paintComponent( Graphics g )
  {
    super.paintComponent( g );
   
   
    for(int i=0; i<100;i++){
   
    g.drawRect(x, y, 10, 10);
   
    y+= 30;
   
    }
   
   
   
  }

  
      
}
 
Du initialisierst y nur einmal beim Erzeugen des Panels. Danach erhöhst du es jedesmal wenn gezeichnet wird. Das bedeutet es wird nur beim ersten mal ein Rechteck an y Position 0 gezeichnet. Beim zweiten Aufruf nur noch irgendwo ganz unten ausserhalb des Panels.

Gruß

Claus
 

Zurück
Oben