# Diagramm in einem Applet zeichnen



## poops90 (18. Feb 2010)

Hallo
sorry wenn ich falsch bin aber ich wusste net wo ich sonst rein muss 
ich muss für ein referat ein diagramm zeichnen das sich mit 2 scrollbars verändern lässt
eigentlich läuft jetz schon fast alles aus so ein scheiß kolben, den mein lehrer haben will, der raus und reinfährt. (bliebt nicht rot und man sihet blauen balken) 
irgendwie kann ich ihn nicht mit dem schaubild verknüpfen, könnt ihr mir helfe?

Quelltext

```
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.awt.Graphics;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 16.02.2010
  * @author
  */

public class neu extends Applet {
  Pause p=new Pause();
  int xmax=500;
  int ymax=500;
  int V=1;
  int T=273;
  int x0, y0, x1, x2, y1, y2, r, fakx, faky, xPUNKT, yPUNKT;
        int Ex=25;      // linter oberer Eckpunkt Zylinder
        int Ey=330;     // linker oberer Eckpunkt Zylinder
        int Bx=15;      // Breite Kolben
        int By=30;      // Breite Zylinder
        int xm=Ex+Bx+100;
        int ym=(Ey+(By/2)-1);
        
  Scrollbar sbarVOLUMEN, sbarTEMPERATUR;
  Label labVOLUMEN, labTEMPERATUR, labPUNKT;

  
  public void init() {

    resize(xmax, ymax);
    setLayout(null);
    setBackground(Color.lightGray);
    r=5;

    x0=25; y0=ymax-200-15;
    fakx=20;
    faky=30;
    
    labVOLUMEN = new Label("Volumen = "+String.valueOf(V)+"ltr");
    labVOLUMEN.setBounds(50,398,90,25);
    labVOLUMEN.setBackground(Color.gray);
    add(labVOLUMEN);
    
    sbarVOLUMEN = new Scrollbar(Scrollbar.HORIZONTAL,V,1,1,100);
    sbarVOLUMEN.setBounds(150,400,300,20);
    sbarVOLUMEN.setBackground(Color.white);
    add(sbarVOLUMEN);
    sbarVOLUMEN.addAdjustmentListener(new HorcherVOLUMEN());
    
    labTEMPERATUR = new Label("Temperatur = "+String.valueOf(T)+"K");
    labTEMPERATUR.setBounds(330,40,115,25);
    labTEMPERATUR.setBackground(Color.lightGray);
    add(labTEMPERATUR);

    sbarTEMPERATUR = new Scrollbar(Scrollbar.VERTICAL,T,0,1,501);
    sbarTEMPERATUR.setBounds(450,10,20,200);
    sbarTEMPERATUR.setBackground(Color.white);
    add(sbarTEMPERATUR);
    sbarTEMPERATUR.addAdjustmentListener(new HorcherTEMPERATUR());

    labPUNKT = new Label("P("+String.valueOf(V)+") = ");
    labPUNKT.setBounds(330,340,115,25);
    labPUNKT.setBackground(Color.red);
    add(labPUNKT);

  }

  public void paint(Graphics g)
    {

        // Zylinder
        g.drawLine(Ex,Ey,Ex,Ey+By);     //senkrehte
        g.drawLine(Ex-1,Ey,Ex-1,Ey+By);            // doppelte Line
        g.drawLine(Ex-1,Ey-1,Ex+165,Ey-1);  // waagrechte
        g.drawLine(Ex-1,Ey-2,Ex+165,Ey-2);            // doppelte Linie oben
        g.drawLine(Ex-1,Ey+By,Ex+165,Ey+By); // waagrechte
        g.drawLine(Ex-1,Ey+By+1,Ex+165,Ey+By+1);      // doppelte Linie unten
        // Kolben
        g.setColor(Color.blue);
        g.fillRect(Ex+V,Ey,Bx,By);
        g.fillRect(Ex+Bx+V-1,ym,100,3);


    

        // Zeichenfläche
        g.setColor(Color.white);
        g.fillRect(r,r,xmax-2*r,ymax-200);
        g.setColor(Color.black);
        g.drawRect(r,r,xmax-2*r,ymax-200);
        g.clipRect(r,r,xmax-2*r,ymax-200);

        // Koordinatenachsen
        g.drawLine(x0,y0,xmax-20,y0);
        g.drawLine(x0,y0,x0,2*r+35);


        // Beschriftung
        int i;
        for (i=0; i<=12; i=i+1)
            {
            g.drawLine(x0+i*fakx,y0,x0+i*fakx,y0+3);
            }

        for (i=-1; i>=-7; i=i-1)
            {
            g.drawLine(x0,y0+i*faky,x0-3,y0+i*faky);
            }

        for (i=0; i<=12; i=i+1)
            {
            g.drawString(Integer.toString(i),x0+1*i*fakx,y0+15);
            }

        for (i=1; i<=7; i=i+1)
            {
            g.drawString(Integer.toString(i),x0-2*r,y0-i*faky);
            }

        g.drawString("V",xmax-30,y0-1);
        g.drawString("[ltr]",xmax-34,y0+11);
        g.drawString("P",x0-10,r+r+20);
        g.drawString("[bar]",x0-19,r+r+32);
        
        // Funktion zeichnen
        
        double x11 = 0.1;

        while (x11<=12)
        {
        x1 = (int) (x11*fakx + x0);
        y1 = (int) (fvonX(x11)*faky+y0);
        x2 = (int) ((x11+0.1)*fakx +x0);
        y2 = (int) (fvonX(x11+0.1)*faky+ y0);
        g.drawLine(x1,y1,x2,y2);
        x11 = x11+0.1;
         
        }
        
        // Punkt zeichnen
        
      double xwert=V;
      double ywert=-0.044079*8.31*T/(V*0.001)/100000;

      xPUNKT= (int) (x0+xwert*fakx);
      yPUNKT= (int) (y0+ywert*faky);

         g.setColor(Color.red);
         g.fillOval(xPUNKT,yPUNKT,5,5);
        
    }
    
    public double fvonX(double V)
    {
    double ywert;
    ywert =-0.044079*8.31*T/(V*0.001)/100000;
    return ywert;

    }

 class HorcherVOLUMEN implements AdjustmentListener
        {
        public void adjustmentValueChanged(AdjustmentEvent e1)
            {

            V=e1.getValue();
            labVOLUMEN.setText("Volumen = "+String.valueOf(V)+"ltr");
            labPUNKT.setText("P("+String.valueOf(V)+") = ");
            repaint();
            zeichneneu();
            }

        }
        
 class HorcherTEMPERATUR implements AdjustmentListener
        {
        public void adjustmentValueChanged(AdjustmentEvent e1)
            {
            
            T=e1.getValue();
            labTEMPERATUR.setText("Temperatur = "+String.valueOf(T)+"K");
            labPUNKT.setText("P("+String.valueOf(V)+") = ");
             repaint();
            }
        }
        
 public void zeichneneu()
    {
        Graphics g=getGraphics();

        g.setColor(Color.blue);
        g.fillRect(Ex,Ey,Bx,By);
        //p.warten(14);
        
        g.clearRect(Ex,Ey,Bx,By);
        g.clearRect(Ex+Bx,ym-3,100,6);
        g.setColor(Color.lightGray);
        
        g.setColor(Color.blue);
        //p.warten(10);
        g.fillRect(Ex+V,Ey,Bx,By);
        g.setColor(Color.red);
        g.fillRect(Ex,Ey,V,By);
        g.setColor(Color.blue);
        g.fillRect(Ex+Bx,ym,100,3);
        
        g.dispose();
    }

}
```


----------



## L-ectron-X (18. Feb 2010)

Man kann deinen Code leider nicht testen (die Klasse Pause.java fehlt).


----------



## poops90 (19. Feb 2010)

des braucht man auhc net wirklcih, kannste rauslöschen...


----------



## Foermchen82 (19. Feb 2010)

Ich weiß zwar ehrlich gesagt nicht genau, was du erreichen willst, aber entfern beim HorcherVOLUMEN mal das repaint. Dann seh ich bei mir was rotes. ist es das was du willst?


----------



## Michael... (19. Feb 2010)

Deine Art zu zeichnen ist falsch.
- man überschreibt nicht die paint bzw. paintComponent eines Applets, Frames o.ä.
- man ruft auf Komponenten nie getGraphics() auf (siehe Methoden zeichnen)

Grundsätzlich zeichnet man (mehr oder weniger direkt) innerhalb der paint(Graphics g) [AWT] oder paintComponent(Graphics g) [Swing]


----------

