Warum zeichnet er nciht neu?

Status
Nicht offen für weitere Antworten.

Kussefar

Mitglied
HI,

würde ma gerne wissen, warum mein graph nicht neu gezeichnet wid, wenn ich die scrollbar versschieb...
danke im vorraus...

Code:
import java.awt.*;
import java.awt.event.*;

/**
  *
  * Beschreibung.
  *
  * @version 1.0 vom 03.04.2006
  * @author
  */

public class schiefer_wurf extends Frame
{
  // Anfang Variablen

  double y = 0;
  double vy = 0;
  double x = 0;
  double vx = 0;
  double v0 = 5;
  double t = 0;
  double dt = 0.01;
  
  private Panel panel1 = new Panel(null)
  {
    public void paint(Graphics g)
     {
      g.drawLine(0,0,0,getHeight());
      g.drawString("y",5,5);
      g.drawLine(0,getHeight()-1,getWidth(),getHeight()-1);
      g.drawString("x",getWidth()-5,getHeight()-5);
      
      //berechnen
      
      a = Winkel.getValue()*10;
      
      vy = v0 * Math.sin(a*Math.PI/180);
      vx = v0 * Math.cos(a*Math.PI/180);
      
      while ( y >= 0)
       {
         g.setColor(Color.red);
         
         y = y + vy + dt;
         vy = vy - 9.81*dt;
         x = x + vx + dt;
         
         g.fillOval((int)x,getHeight()-(int)y,2,2);
         
         list1.add("   "+ (int)x + "                                      " + (int)y);
       }
     }
  };
  private List list1 = new List();
  private Label label1 = new Label();
  private Label label2 = new Label();
  int a = 5;
  AdjustmentListener listener1;
  Scrollbar Winkel = new Scrollbar(Scrollbar.HORIZONTAL,a,1,-10,10);

  // Ende Variablen

  public schiefer_wurf(String title)
  {
    // Frame-Initialisierung
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    int frameWidth = 742;
    int frameHeight = 531;
    setSize(frameWidth, frameHeight);
    Panel cp = new Panel(null);
    add(cp);
    // Anfang Komponenten

    panel1.setBounds(376, 64, 305, 321);
    panel1.setBackground(Color.YELLOW);
    panel1.setFont (new Font("MS Sans Serif", Font.PLAIN, 13));
    panel1.setForeground(Color.BLACK);
    cp.add(panel1);
    list1.setBounds(40, 64, 265, 321);
    cp.add(list1);
    label1.setBounds(40, 40, 85, 16);
    label1.setText("Strecke");
    label1.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label1);
    label2.setBounds(144, 40, 77, 16);
    label2.setText("Hoehe");
    label2.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(label2);

    listener1 = new AdjustmentListener()
       {
         public void adjustmentValueChanged(AdjustmentEvent e)
          {

            repaint();
          }
       };
       
      setLayout(null);

      Winkel.setBounds(285,410,105,20);
      Winkel.addAdjustmentListener(listener1);
      add(panel1);
      add(list1);
      add(label1);
      add(label2);
      add(Winkel);

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
   }
  

  // Anfang Ereignisprozeduren


  // Ende Ereignisprozeduren

  public static void main(String[] args) {
    new schiefer_wurf("schiefer_wurf");
  }
}
 
G

Gast

Gast
durch das setLayout(null) werden irgendwie die Unterkomponenten des Frames beim repaint() nicht berücksichtigt,

warum kann ich persönlich nicht sagen, aber vielleicht hilft das ja zur weiteren google-Suche/ nachfragen
 

André Uhres

Top Contributor
Du musst sicher deine Variablen jedesmal neu initialisieren.
Z.B. wird gemäss der Logik in paint(..) nichts gezeichnet wenn y<0 ist.
Code:
       listener1 = new AdjustmentListener() {
            public void adjustmentValueChanged(AdjustmentEvent e) {
                y = 0;
                vy = 0;
                x = 0;
                vx = 0;
                v0 = 5;
                t = 0;
                dt = 0.01;
                panel1.repaint();
            }
        };
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben