# Grafik verschwindet durch Größenveränderung von GridBag



## HendsteR (8. Dez 2008)

Ich habe in einem selbstgeschriebenen Programm eine kleine Grafik, bestehend aus nur 3 Rechtecken, eingebaut.
Diese sitzt in einem Panel, welches in dem GridBagLayout des gesamten Applets eingebaut ist.
Das Problem ist nun, dass die Methode zeichnen() direkt nach der Methode update() aufgerufen wird. Nachdem update() einige Werte von anderen Labels etc. im Applet verändern, verändern die Labels daraufhin ihre Größe. Das gesamte GridBagLayout verschiebt sich etwas. Dadurch verschwindet dann die Grafik, die noch vor bzw. mitten in der Gröenveränderung sichtbar wurde.

Wie kann ich dies nun beheben?

Kann ich das Anzeigen der Grafik irgendwie herauszögern, sodass diese erst nach der Veränderung des Layouts erscheint oder kann ich vllt das GridBag so verändern, dass es sich nicht mehr verschiebt, sondern einfach in den Größenverhältnissen an die Gesamtfenstergröße angepasst bleibt? Sodass es sich nur verändert, wenn ich die Größe des Fensters ändere?

Bitte helft mir...

Liebe Grüße Hendrik


----------



## Quaxli (9. Dez 2008)

Zeig mal den Code, wo gezeichnet wird, der ist vermutlich nicht korrekt, wenn Du zeichnen() und update() in einem Satz verwendetst


----------



## HendsteR (9. Dez 2008)

ok, dann ist hier der code, kann sein, dass er recht umständlich geschrieben ist. wir haben im informatikunterricht grad java und dürfen es uns selbst beibringen....


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.Math;
import java.awt.Graphics.*;
import java.applet.Applet;

public class AutoApplet extends JApplet {

    Auto Wagen1 = new Auto();
    Auto Wagen2 = new Auto();
    Color Gruen = new Color(0,240,0);
    Color Rot = new Color(255,0,0);
    Color Schwarz = new Color(0,0,0);   
    
    public void init()  {
        Wagen1.init();
        GridBagLayout gb1 = new GridBagLayout();
        setLayout(gb1);
        GridBagConstraints gbc1 = new GridBagConstraints();
        gbc1.gridx = 0;
        gbc1.gridy = 0;
        gbc1.gridwidth = 3;
        gbc1.gridheight = 1;
        gbc1.weightx = 100;
        gbc1.weighty = 100;
        gbc1.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.Wagen, gbc1);
        add (Wagen1.Wagen);
        Wagen1.Wagen.addItem("Bitte Fahrzeug wählen...");
        Wagen1.Wagen.addItem("Porsche 911 Turbo Coupé");
        Wagen1.Wagen.addItem("Mercedes B 200");
        Wagen1.Wagen.addItem("3");
        //Wagen1.Wagen initialisiert und Position zugewiesen...
        
        GridBagConstraints gbc2 = new GridBagConstraints();
        gbc2.gridx = 1;
        gbc2.gridy = 3;
        gbc2.gridwidth = 2;
        gbc2.gridheight = 1;
        gbc2.weightx = 100;
        gbc2.weighty = 100;
        gbc2.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l5, gbc2);
        add(Wagen1.l5);
        
        GridBagConstraints gbc3 = new GridBagConstraints();
        gbc3.gridx = 0;
        gbc3.gridy = 3;
        gbc3.gridwidth = 1;
        gbc3.gridheight = 1;
        gbc3.weightx = 100;
        gbc3.weighty = 100;
        gbc3.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.t3, gbc3);
        add(Wagen1.t3);
        
        GridBagConstraints gbc4 = new GridBagConstraints();
        gbc4.gridx = 0;
        gbc4.gridy = 1;
        gbc4.gridwidth = 1;
        gbc4.gridheight = 1;
        gbc4.weightx = 100;
        gbc4.weighty = 100;
        gbc4.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.t1, gbc4);
        add(Wagen1.t1);
        
        GridBagConstraints gbc5 = new GridBagConstraints();
        gbc5.gridx = 1;
        gbc5.gridy = 1;
        gbc5.gridwidth = 1;
        gbc5.gridheight = 1;
        gbc5.weightx = 100;
        gbc5.weighty = 100;
        gbc5.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l1, gbc5);
        add(Wagen1.l1);

        GridBagConstraints gbc6 = new GridBagConstraints();
        gbc6.gridx = 3;
        gbc6.gridy = 1;
        gbc6.gridwidth = 1;
        gbc6.gridheight = 1;
        gbc6.weightx = 100;
        gbc6.weighty = 100;
        gbc6.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.b1, gbc6);
        add(Wagen1.b1);
        
        GridBagConstraints gbc7 = new GridBagConstraints();
        gbc7.gridx = 0;
        gbc7.gridy = 2;
        gbc7.gridwidth = 1;
        gbc7.gridheight = 1;
        gbc7.weightx = 100;
        gbc7.weighty = 100;
        gbc7.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.t2, gbc7);
        add(Wagen1.t2);
        
        GridBagConstraints gbc8 = new GridBagConstraints();
        gbc8.gridx = 1;
        gbc8.gridy = 2;
        gbc8.gridwidth = 1;
        gbc8.gridheight = 1;
        gbc8.weightx = 100;
        gbc8.weighty = 100;
        gbc8.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l2, gbc8);
        add(Wagen1.l2);
        
        GridBagConstraints gbc9 = new GridBagConstraints();
        gbc9.gridx = 3;
        gbc9.gridy = 2;
        gbc9.gridwidth = 1;
        gbc9.gridheight = 1;
        gbc9.weightx = 100;
        gbc9.weighty = 100;
        gbc9.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.b2, gbc9);
        add(Wagen1.b2);
        
        GridBagConstraints gbc10 = new GridBagConstraints();
        gbc10.gridx = 2;
        gbc10.gridy = 6;
        gbc10.gridwidth = 2;
        gbc10.gridheight = 1;
        gbc10.weightx = 100;
        gbc10.weighty = 100;
        gbc10.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.FuellstandsAnzeige, gbc10);
        add(Wagen1.FuellstandsAnzeige);
        
        GridBagConstraints gbc11 = new GridBagConstraints();
        gbc11.gridx = 1;
        gbc11.gridy = 4;
        gbc11.gridwidth = 2;
        gbc11.gridheight = 2;
        gbc11.weightx = 100;
        gbc11.weighty = 100;
        gbc11.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.FuellstandsWarnung, gbc11);
        add(Wagen1.FuellstandsWarnung);
        
        GridBagConstraints gbc12 = new GridBagConstraints();
        gbc12.gridx = 2;
        gbc12.gridy = 7;
        gbc12.gridwidth = 2;
        gbc12.gridheight = 1;
        gbc12.weightx = 100;
        gbc12.weighty = 100;
        gbc12.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.KilometerStand, gbc12);
        add(Wagen1.KilometerStand);
        
        GridBagConstraints gbc13 = new GridBagConstraints();
        gbc13.gridx = 2;
        gbc13.gridy = 9;
        gbc13.gridwidth = 1;
        gbc13.gridheight = 1;
        gbc13.weightx = 100;
        gbc13.weighty = 100;
        gbc13.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.Kostenzeiger, gbc13);
        add(Wagen1.Kostenzeiger);
        
        GridBagConstraints gbc14 = new GridBagConstraints();
        gbc14.gridx = 0;
        gbc14.gridy = 11;
        gbc14.gridwidth = 3;
        gbc14.gridheight = 1;
        gbc14.weightx = 100;
        gbc14.weighty = 100;
        gbc14.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l3, gbc14);
        add(Wagen1.l3);
        
        GridBagConstraints gbc15 = new GridBagConstraints();
        gbc15.gridx = 0;
        gbc15.gridy = 12;
        gbc15.gridwidth = 1;
        gbc15.gridheight = 1;
        gbc15.weightx = 100;
        gbc15.weighty = 100;
        gbc15.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.TankReset, gbc15);
        add(Wagen1.TankReset);
        
        GridBagConstraints gbc16 = new GridBagConstraints();
        gbc16.gridx = 1;
        gbc16.gridy = 12;
        gbc16.gridwidth = 1;
        gbc16.gridheight = 1;
        gbc16.weightx = 100;
        gbc16.weighty = 100;
        gbc16.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.KmReset, gbc16);
        add(Wagen1.KmReset);
        
        GridBagConstraints gbc17 = new GridBagConstraints();
        gbc17.gridx = 2;
        gbc17.gridy = 12;
        gbc17.gridwidth = 2;
        gbc17.gridheight = 1;
        gbc17.weightx = 100;
        gbc17.weighty = 100;
        gbc17.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.GeldReset, gbc17);
        add(Wagen1.GeldReset);     
        
        GridBagConstraints gbc18 = new GridBagConstraints();
        gbc18.gridx = 0;
        gbc18.gridy = 6;
        gbc18.gridwidth = 2;
        gbc18.gridheight = 1;
        gbc18.weightx = 100;
        gbc18.weighty = 100;
        gbc18.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l6, gbc18);
        add(Wagen1.l6);
        
        GridBagConstraints gbc19 = new GridBagConstraints();
        gbc19.gridx = 0;
        gbc19.gridy = 7;
        gbc19.gridwidth = 2;
        gbc19.gridheight = 1;
        gbc19.weightx = 100;
        gbc19.weighty = 100;
        gbc19.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l7, gbc19);
        add(Wagen1.l7);
        
        GridBagConstraints gbc20 = new GridBagConstraints();
        gbc20.gridx = 0;
        gbc20.gridy = 8;
        gbc20.gridwidth = 2;
        gbc20.gridheight = 1;
        gbc20.weightx = 100;
        gbc20.weighty = 100;
        gbc20.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l8, gbc20);
        add(Wagen1.l8);
        
        GridBagConstraints gbc21 = new GridBagConstraints();
        gbc21.gridx = 2;
        gbc21.gridy = 8;
        gbc21.gridwidth = 2;
        gbc21.gridheight = 1;
        gbc21.weightx = 100;
        gbc21.weighty = 100;
        gbc21.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.Verbrauch, gbc21);
        add(Wagen1.Verbrauch);
        
        GridBagConstraints gbc22 = new GridBagConstraints();
        gbc22.gridx = 2;
        gbc22.gridy = 1;
        gbc22.gridwidth = 1;
        gbc22.gridheight = 2;
        gbc22.weightx = 100;
        gbc22.weighty = 100;
        gbc22.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.Draw, gbc22);
        add(Wagen1.Draw);
        Wagen1.Draw.setLayout(new BorderLayout());
        Wagen1.Draw.getGraphics();
        
    }
    
    public class Auto {
        double Tankinhalt, VerbrauchAuf100km, MaxTankinhalt, KmStand, Fahrtkosten, Strecke, Tankvorgang, Spritpreis;
        JTextField t1 = new JTextField("0.00", 5);
        JTextField t2 = new JTextField("0.00", 5);
        JTextField t3 = new JTextField("0.00", 5);
        JLabel l1 = new JLabel(" km fahren");
        JLabel l2 = new JLabel(" l tanken");
        JLabel FuellstandsAnzeige = new JLabel("        0.00 ");
        JLabel FuellstandsWarnung = new JLabel("               ");
        JLabel KilometerStand = new JLabel("               ");
        JLabel l3 = new JLabel("Auf 0 setzen: ");
        JLabel Kostenzeiger = new JLabel("0.00 €");
        JLabel l5 = new JLabel (" Benzinpreis €/l");
        JLabel l6 = new JLabel ("Tankfülle: ");
        JLabel l7 = new JLabel ("Gefahrene Km: ");
        JLabel l8 = new JLabel ("Verbrauch auf 100km: ");
        JLabel Verbrauch = new JLabel ("   0.00 l ");
        JButton b1 = new JButton("OK");
        JButton b2 = new JButton("OK");
        JButton TankReset = new JButton("Tank");
        JButton KmReset = new JButton("Km-Stand");
        JButton GeldReset = new JButton("Benzinkosten");
        Choice Wagen = new Choice();
        JPanel Draw = new JPanel();
        
        public void init () {
            Tankinhalt = 0.0;
            VerbrauchAuf100km = 0.0;
            MaxTankinhalt = 0.0;
            KmStand = 0.0;
            Fahrtkosten = 0.0;
            Strecke = 0.0;
            Tankvorgang = 0.0;
            Spritpreis = 0.0;
            update();
            Wagen.addItemListener (new WagenItemListener());
            b1.addActionListener (new b1Listener());
            b2.addActionListener (new b2Listener());
            TankReset.addActionListener (new TankResetListener());
            KmReset.addActionListener (new KmResetListener());
            GeldReset.addActionListener (new GeldResetListener());
          //  t1.addTextListener(new StreckenListener());
          //  t2.addTextListener(new TankListener());
          //  t3.addTextListener(new PreisListener());
        }
        
        void update()   {
                Tankinhalt = Math.round(Tankinhalt*100)/100.0;
            FuellstandsAnzeige.setText (Double.toString (Tankinhalt)+(" Liter ")+("/ ")+(MaxTankinhalt)+(" Liter"));
            FuellstandsWarnung.setFont (new Font("Times New Roman", Font.PLAIN, 28));
            if ((Tankinhalt)<=0)    {
                FuellstandsWarnung.setForeground(Rot);
                FuellstandsWarnung.setText (" Der Tank ist LEER!");
            }
            else if ((Tankinhalt)>0 && (Tankinhalt)<(MaxTankinhalt))    
                FuellstandsWarnung.setText ("               ");
            else    {
                FuellstandsWarnung.setForeground(Gruen);
                FuellstandsWarnung.setText (" Der Tank ist VOLL!");
            }
            KmStand = Math.round(KmStand*100)/100.0;
            KilometerStand.setText (Double.toString (KmStand)+(" Km"));
            Fahrtkosten = Math.round(Fahrtkosten*100)/100.0;
            Kostenzeiger.setText (Double.toString (Fahrtkosten)+(" € "));
            Verbrauch.setText (Double.toString (VerbrauchAuf100km)+(" l ")); 
    //        loeschen();
    //        zeichnen();
        }
        
        
        public void zeichnen()  {
            int Leermenge, i;
            Leermenge = (int)(75*(MaxTankinhalt - Tankinhalt)/MaxTankinhalt);
            Graphics g = Draw.getGraphics();
            for (i = 1; i <= 21 ; i++)  {
                g.setColor(Schwarz);
                g.fillRect(20, 10, 70, 85);
                g.setColor(Gruen);
                g.fillRect(25, 15, 60, 75);
                g.setColor(Color.red);
                g.fillRect(25, 15, 60, Leermenge);
            }

        }
                
        
        class WagenItemListener implements ItemListener  { 
            public void itemStateChanged(ItemEvent ie)  {
                Choice Wagen = (Choice) ie.getItemSelectable();
                String str1 = Wagen.getSelectedItem();
                if (str1==("Porsche 911 Turbo Coupé"))  {
                    MaxTankinhalt = 67;
                    Tankinhalt = 0.0;
                    KmStand = 0.0;
                    VerbrauchAuf100km = 13.6;
                    update();                    
                    zeichnen();
                }
                else if (str1==("Mercedes B 200"))   {
                    MaxTankinhalt = 56;
                    Tankinhalt = 0.0;
                    KmStand = 0.0;
                    VerbrauchAuf100km = 7.4;
                    update();
                    zeichnen();
                }
                else if (str1==("3"))   {
                    MaxTankinhalt = 76;
                    Tankinhalt = 0.0;
                    VerbrauchAuf100km = 0.0;
                }
                    
            }
        }
        
        class b1Listener implements ActionListener  {
            public void actionPerformed(ActionEvent a)  {
                Strecke = Double.valueOf(t1.getText());
                if (((Strecke)*(VerbrauchAuf100km)/100)<=(Tankinhalt))   {
                    KmStand = KmStand + Strecke;
                    Tankinhalt = Tankinhalt - (Strecke*VerbrauchAuf100km/100);
                }
                else    {
                    KmStand = KmStand + (Tankinhalt/VerbrauchAuf100km*100);
                    Tankinhalt = 0;
                }
                update();
                zeichnen();
            }
        }
        
        class b2Listener implements ActionListener  {
            public void actionPerformed(ActionEvent a)  {
                Tankvorgang = Double.valueOf(t2.getText());
                Spritpreis = Double.valueOf(t3.getText());
                if ((MaxTankinhalt)>=(Tankinhalt+Tankvorgang))  {
                    Tankinhalt = Tankinhalt + Tankvorgang;
                    Fahrtkosten = Fahrtkosten + Tankvorgang*Spritpreis;
                }
                else    {
                    Fahrtkosten = Fahrtkosten + ((MaxTankinhalt - Tankinhalt) * Spritpreis);
                    Tankinhalt = MaxTankinhalt;
                }
                update();
                zeichnen();
            }
        }
        
        class TankResetListener implements ActionListener   {
            public void actionPerformed(ActionEvent a)  {
                Tankinhalt = 0;
                update();
                zeichnen();
            }
        }
        
        class KmResetListener implements ActionListener {
            public void actionPerformed(ActionEvent a)  {
                KmStand = 0;
                update();
                zeichnen();
            }
        }
        
        class GeldResetListener implements ActionListener   {
            public void actionPerformed(ActionEvent a) {
                Fahrtkosten = 0;
                update();
                zeichnen();
            }
        }
        
        public void paint(Graphics g)   {
            zeichnen();
        }
        
        
        //---------------------------- überflüssig durch JTextField----------------------------------------------------------
        
        class StreckenListener implements TextListener  {
            public void textValueChanged(TextEvent te)  {
                TextField t1 = (TextField)te.getSource();
                Strecke = Double.valueOf(t1.getText());
            }
        }      
        
        class TankListener implements TextListener  {
            public void textValueChanged(TextEvent te)  {
                TextField t2 = (TextField)te.getSource();
                Tankvorgang = Double.valueOf(t2.getText());
            }
        }
        class PreisListener implements TextListener {
            public void textValueChanged(TextEvent te)  {
                TextField t3 = (TextField)te.getSource();
                Spritpreis = Double.valueOf(t3.getText());
            }
        }
                
    }
}
```


----------



## Quaxli (9. Dez 2008)

Oh je. Ich hab's jetzt mal so hingebogen, daß es läuft. Sträube mich aber sehr das zu posten, weil Du da schon einiges verbrochen hast. Zunächst hier mal der Code, ich habe nur das Nötigste hingebogen. Schau Dir an, was ich in Deiner Klasse Auto geändert habe und wie sich das auswirkt:


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.Math;
import java.awt.Graphics.*;
import java.applet.Applet;

public class AutoApplet extends JApplet {

    Auto Wagen1 = new Auto();
    Auto Wagen2 = new Auto();
    Color Gruen = new Color(0,240,0);
    Color Rot = new Color(255,0,0);
    Color Schwarz = new Color(0,0,0);   
   
    public void init()  {
    	  setSize(500,500);
        Wagen1.init(this);
        GridBagLayout gb1 = new GridBagLayout();
        setLayout(gb1);
        GridBagConstraints gbc1 = new GridBagConstraints();
        gbc1.gridx = 0;
        gbc1.gridy = 0;
        gbc1.gridwidth = 3;
        gbc1.gridheight = 1;
        gbc1.weightx = 100;
        gbc1.weighty = 100;
        gbc1.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.Wagen, gbc1);
        add (Wagen1.Wagen);
        Wagen1.Wagen.addItem("Bitte Fahrzeug wählen...");
        Wagen1.Wagen.addItem("Porsche 911 Turbo Coupé");
        Wagen1.Wagen.addItem("Mercedes B 200");
        Wagen1.Wagen.addItem("3");
        //Wagen1.Wagen initialisiert und Position zugewiesen...
       
        GridBagConstraints gbc2 = new GridBagConstraints();
        gbc2.gridx = 1;
        gbc2.gridy = 3;
        gbc2.gridwidth = 2;
        gbc2.gridheight = 1;
        gbc2.weightx = 100;
        gbc2.weighty = 100;
        gbc2.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l5, gbc2);
        add(Wagen1.l5);
       
        GridBagConstraints gbc3 = new GridBagConstraints();
        gbc3.gridx = 0;
        gbc3.gridy = 3;
        gbc3.gridwidth = 1;
        gbc3.gridheight = 1;
        gbc3.weightx = 100;
        gbc3.weighty = 100;
        gbc3.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.t3, gbc3);
        add(Wagen1.t3);
       
        GridBagConstraints gbc4 = new GridBagConstraints();
        gbc4.gridx = 0;
        gbc4.gridy = 1;
        gbc4.gridwidth = 1;
        gbc4.gridheight = 1;
        gbc4.weightx = 100;
        gbc4.weighty = 100;
        gbc4.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.t1, gbc4);
        add(Wagen1.t1);
       
        GridBagConstraints gbc5 = new GridBagConstraints();
        gbc5.gridx = 1;
        gbc5.gridy = 1;
        gbc5.gridwidth = 1;
        gbc5.gridheight = 1;
        gbc5.weightx = 100;
        gbc5.weighty = 100;
        gbc5.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l1, gbc5);
        add(Wagen1.l1);

        GridBagConstraints gbc6 = new GridBagConstraints();
        gbc6.gridx = 3;
        gbc6.gridy = 1;
        gbc6.gridwidth = 1;
        gbc6.gridheight = 1;
        gbc6.weightx = 100;
        gbc6.weighty = 100;
        gbc6.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.b1, gbc6);
        add(Wagen1.b1);
       
        GridBagConstraints gbc7 = new GridBagConstraints();
        gbc7.gridx = 0;
        gbc7.gridy = 2;
        gbc7.gridwidth = 1;
        gbc7.gridheight = 1;
        gbc7.weightx = 100;
        gbc7.weighty = 100;
        gbc7.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.t2, gbc7);
        add(Wagen1.t2);
       
        GridBagConstraints gbc8 = new GridBagConstraints();
        gbc8.gridx = 1;
        gbc8.gridy = 2;
        gbc8.gridwidth = 1;
        gbc8.gridheight = 1;
        gbc8.weightx = 100;
        gbc8.weighty = 100;
        gbc8.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l2, gbc8);
        add(Wagen1.l2);
       
        GridBagConstraints gbc9 = new GridBagConstraints();
        gbc9.gridx = 3;
        gbc9.gridy = 2;
        gbc9.gridwidth = 1;
        gbc9.gridheight = 1;
        gbc9.weightx = 100;
        gbc9.weighty = 100;
        gbc9.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.b2, gbc9);
        add(Wagen1.b2);
       
        GridBagConstraints gbc10 = new GridBagConstraints();
        gbc10.gridx = 2;
        gbc10.gridy = 6;
        gbc10.gridwidth = 2;
        gbc10.gridheight = 1;
        gbc10.weightx = 100;
        gbc10.weighty = 100;
        gbc10.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.FuellstandsAnzeige, gbc10);
        add(Wagen1.FuellstandsAnzeige);
       
        GridBagConstraints gbc11 = new GridBagConstraints();
        gbc11.gridx = 1;
        gbc11.gridy = 4;
        gbc11.gridwidth = 2;
        gbc11.gridheight = 2;
        gbc11.weightx = 100;
        gbc11.weighty = 100;
        gbc11.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.FuellstandsWarnung, gbc11);
        add(Wagen1.FuellstandsWarnung);
       
        GridBagConstraints gbc12 = new GridBagConstraints();
        gbc12.gridx = 2;
        gbc12.gridy = 7;
        gbc12.gridwidth = 2;
        gbc12.gridheight = 1;
        gbc12.weightx = 100;
        gbc12.weighty = 100;
        gbc12.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.KilometerStand, gbc12);
        add(Wagen1.KilometerStand);
       
        GridBagConstraints gbc13 = new GridBagConstraints();
        gbc13.gridx = 2;
        gbc13.gridy = 9;
        gbc13.gridwidth = 1;
        gbc13.gridheight = 1;
        gbc13.weightx = 100;
        gbc13.weighty = 100;
        gbc13.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.Kostenzeiger, gbc13);
        add(Wagen1.Kostenzeiger);
       
        GridBagConstraints gbc14 = new GridBagConstraints();
        gbc14.gridx = 0;
        gbc14.gridy = 11;
        gbc14.gridwidth = 3;
        gbc14.gridheight = 1;
        gbc14.weightx = 100;
        gbc14.weighty = 100;
        gbc14.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l3, gbc14);
        add(Wagen1.l3);
       
        GridBagConstraints gbc15 = new GridBagConstraints();
        gbc15.gridx = 0;
        gbc15.gridy = 12;
        gbc15.gridwidth = 1;
        gbc15.gridheight = 1;
        gbc15.weightx = 100;
        gbc15.weighty = 100;
        gbc15.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.TankReset, gbc15);
        add(Wagen1.TankReset);
       
        GridBagConstraints gbc16 = new GridBagConstraints();
        gbc16.gridx = 1;
        gbc16.gridy = 12;
        gbc16.gridwidth = 1;
        gbc16.gridheight = 1;
        gbc16.weightx = 100;
        gbc16.weighty = 100;
        gbc16.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.KmReset, gbc16);
        add(Wagen1.KmReset);
       
        GridBagConstraints gbc17 = new GridBagConstraints();
        gbc17.gridx = 2;
        gbc17.gridy = 12;
        gbc17.gridwidth = 2;
        gbc17.gridheight = 1;
        gbc17.weightx = 100;
        gbc17.weighty = 100;
        gbc17.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.GeldReset, gbc17);
        add(Wagen1.GeldReset);     
       
        GridBagConstraints gbc18 = new GridBagConstraints();
        gbc18.gridx = 0;
        gbc18.gridy = 6;
        gbc18.gridwidth = 2;
        gbc18.gridheight = 1;
        gbc18.weightx = 100;
        gbc18.weighty = 100;
        gbc18.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l6, gbc18);
        add(Wagen1.l6);
       
        GridBagConstraints gbc19 = new GridBagConstraints();
        gbc19.gridx = 0;
        gbc19.gridy = 7;
        gbc19.gridwidth = 2;
        gbc19.gridheight = 1;
        gbc19.weightx = 100;
        gbc19.weighty = 100;
        gbc19.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l7, gbc19);
        add(Wagen1.l7);
       
        GridBagConstraints gbc20 = new GridBagConstraints();
        gbc20.gridx = 0;
        gbc20.gridy = 8;
        gbc20.gridwidth = 2;
        gbc20.gridheight = 1;
        gbc20.weightx = 100;
        gbc20.weighty = 100;
        gbc20.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.l8, gbc20);
        add(Wagen1.l8);
       
        GridBagConstraints gbc21 = new GridBagConstraints();
        gbc21.gridx = 2;
        gbc21.gridy = 8;
        gbc21.gridwidth = 2;
        gbc21.gridheight = 1;
        gbc21.weightx = 100;
        gbc21.weighty = 100;
        gbc21.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1.Verbrauch, gbc21);
        add(Wagen1.Verbrauch);
       
        GridBagConstraints gbc22 = new GridBagConstraints();
        gbc22.gridx = 2;
        gbc22.gridy = 1;
        gbc22.gridwidth = 1;
        gbc22.gridheight = 2;
        gbc22.weightx = 100;
        gbc22.weighty = 100;
        gbc22.fill = GridBagConstraints.BOTH;
        gb1.setConstraints(Wagen1, gbc22);
        add(Wagen1);
        Wagen1.setLayout(new BorderLayout());
        Wagen1.getGraphics();
       
    }
   
    public class Auto extends JPanel{
        double Tankinhalt, VerbrauchAuf100km, MaxTankinhalt, KmStand, Fahrtkosten, Strecke, Tankvorgang, Spritpreis;
        JTextField t1 = new JTextField("0.00", 5);
        JTextField t2 = new JTextField("0.00", 5);
        JTextField t3 = new JTextField("0.00", 5);
        JLabel l1 = new JLabel(" km fahren");
        JLabel l2 = new JLabel(" l tanken");
        JLabel FuellstandsAnzeige = new JLabel("        0.00 ");
        JLabel FuellstandsWarnung = new JLabel("               ");
        JLabel KilometerStand = new JLabel("               ");
        JLabel l3 = new JLabel("Auf 0 setzen: ");
        JLabel Kostenzeiger = new JLabel("0.00 €");
        JLabel l5 = new JLabel (" Benzinpreis €/l");
        JLabel l6 = new JLabel ("Tankfülle: ");
        JLabel l7 = new JLabel ("Gefahrene Km: ");
        JLabel l8 = new JLabel ("Verbrauch auf 100km: ");
        JLabel Verbrauch = new JLabel ("   0.00 l ");
        JButton b1 = new JButton("OK");
        JButton b2 = new JButton("OK");
        JButton TankReset = new JButton("Tank");
        JButton KmReset = new JButton("Km-Stand");
        JButton GeldReset = new JButton("Benzinkosten");
        Choice Wagen = new Choice();
        //JPanel Draw = new JPanel();
        JApplet applet;
       
        public void init (JApplet ja) {
        	  applet = ja;
            Tankinhalt = 0.0;
            VerbrauchAuf100km = 0.0;
            MaxTankinhalt = 0.0;
            KmStand = 0.0;
            Fahrtkosten = 0.0;
            Strecke = 0.0;
            Tankvorgang = 0.0;
            Spritpreis = 0.0;
            update();
            Wagen.addItemListener (new WagenItemListener());
            b1.addActionListener (new b1Listener());
            b2.addActionListener (new b2Listener());
            TankReset.addActionListener (new TankResetListener());
            KmReset.addActionListener (new KmResetListener());
            GeldReset.addActionListener (new GeldResetListener());
          //  t1.addTextListener(new StreckenListener());
          //  t2.addTextListener(new TankListener());
          //  t3.addTextListener(new PreisListener());
        }
       
        void update()   {
                Tankinhalt = Math.round(Tankinhalt*100)/100.0;
            FuellstandsAnzeige.setText (Double.toString (Tankinhalt)+(" Liter ")+("/ ")+(MaxTankinhalt)+(" Liter"));
            FuellstandsWarnung.setFont (new Font("Times New Roman", Font.PLAIN, 28));
            if ((Tankinhalt)<=0)    {
                FuellstandsWarnung.setForeground(Rot);
                FuellstandsWarnung.setText (" Der Tank ist LEER!");
            }
            else if ((Tankinhalt)>0 && (Tankinhalt)<(MaxTankinhalt))   
                FuellstandsWarnung.setText ("               ");
            else    {
                FuellstandsWarnung.setForeground(Gruen);
                FuellstandsWarnung.setText (" Der Tank ist VOLL!");
            }
            KmStand = Math.round(KmStand*100)/100.0;
            KilometerStand.setText (Double.toString (KmStand)+(" Km"));
            Fahrtkosten = Math.round(Fahrtkosten*100)/100.0;
            Kostenzeiger.setText (Double.toString (Fahrtkosten)+(" € "));
            Verbrauch.setText (Double.toString (VerbrauchAuf100km)+(" l "));
    //        loeschen();
    //        zeichnen();
        }
       
       
        //Zeichnen-Methode so umbenannt, daß sie paintComponent überschreibt
        public void paintComponent(Graphics g)  {
            int Leermenge, i;
            Leermenge = (int)(75*(MaxTankinhalt - Tankinhalt)/MaxTankinhalt);
            //Graphics g = Draw.getGraphics();
            for (i = 1; i <= 21 ; i++)  {
                g.setColor(Schwarz);
                g.fillRect(20, 10, 70, 85);
                g.setColor(Gruen);
                g.fillRect(25, 15, 60, 75);
                g.setColor(Color.red);
                g.fillRect(25, 15, 60, Leermenge);
            }

        }
               
       
        class WagenItemListener implements ItemListener  {
            public void itemStateChanged(ItemEvent ie)  {
                Choice Wagen = (Choice) ie.getItemSelectable();
                String str1 = Wagen.getSelectedItem();
                if (str1==("Porsche 911 Turbo Coupé"))  {
                    MaxTankinhalt = 67;
                    Tankinhalt = 0.0;
                    KmStand = 0.0;
                    VerbrauchAuf100km = 13.6;
                    update();                   
                    applet.repaint();
                }
                else if (str1==("Mercedes B 200"))   {
                    MaxTankinhalt = 56;
                    Tankinhalt = 0.0;
                    KmStand = 0.0;
                    VerbrauchAuf100km = 7.4;
                    update();
                    applet.repaint();
                }
                else if (str1==("3"))   {
                    MaxTankinhalt = 76;
                    Tankinhalt = 0.0;
                    VerbrauchAuf100km = 0.0;
                }
                   
            }
        }
       
        class b1Listener implements ActionListener  {
            public void actionPerformed(ActionEvent a)  {
                Strecke = Double.valueOf(t1.getText());
                if (((Strecke)*(VerbrauchAuf100km)/100)<=(Tankinhalt))   {
                    KmStand = KmStand + Strecke;
                    Tankinhalt = Tankinhalt - (Strecke*VerbrauchAuf100km/100);
                }
                else    {
                    KmStand = KmStand + (Tankinhalt/VerbrauchAuf100km*100);
                    Tankinhalt = 0;
                }
                update();
                applet.repaint();
            }
        }
       
        class b2Listener implements ActionListener  {
            public void actionPerformed(ActionEvent a)  {
                Tankvorgang = Double.valueOf(t2.getText());
                Spritpreis = Double.valueOf(t3.getText());
                if ((MaxTankinhalt)>=(Tankinhalt+Tankvorgang))  {
                    Tankinhalt = Tankinhalt + Tankvorgang;
                    Fahrtkosten = Fahrtkosten + Tankvorgang*Spritpreis;
                }
                else    {
                    Fahrtkosten = Fahrtkosten + ((MaxTankinhalt - Tankinhalt) * Spritpreis);
                    Tankinhalt = MaxTankinhalt;
                }
                update();
                applet.repaint();
            }
        }
       
        class TankResetListener implements ActionListener   {
            public void actionPerformed(ActionEvent a)  {
                Tankinhalt = 0;
                update();
                applet.repaint();
            }
        }
       
        class KmResetListener implements ActionListener {
            public void actionPerformed(ActionEvent a)  {
                KmStand = 0;
                update();
                applet.repaint();
            }
        }
       
        class GeldResetListener implements ActionListener   {
            public void actionPerformed(ActionEvent a) {
                Fahrtkosten = 0;
                update();
                applet.repaint();
            }
        }
       
        //Wird nicht gebraucht, da man in Swing paintComponent überschreibt und nicht paint();
        /*public void paint(Graphics g)   {
            zeichnen();
        }*/
       
       
        //---------------------------- überflüssig durch JTextField----------------------------------------------------------
       
        class StreckenListener implements TextListener  {
            public void textValueChanged(TextEvent te)  {
                TextField t1 = (TextField)te.getSource();
                Strecke = Double.valueOf(t1.getText());
            }
        }     
       
        class TankListener implements TextListener  {
            public void textValueChanged(TextEvent te)  {
                TextField t2 = (TextField)te.getSource();
                Tankvorgang = Double.valueOf(t2.getText());
            }
        }
        class PreisListener implements TextListener {
            public void textValueChanged(TextEvent te)  {
                TextField t3 = (TextField)te.getSource();
                Spritpreis = Double.valueOf(t3.getText());
            }
        }
               
    }
}
```


Abschließend noch ein paar Anmerkungen bzw. Tipps die aber sicherlich nicht erschöpfend sind:


- Wenn man in einem JPanel etwas zeichnen will überschreibt man paintComponent und nutzt das Graphics-Objekt, das dieser Methode übergeben wird.

- getGraphics() sollte man (fast) nie einsetzen um an ein Graphics-Objekt zu kommen. 

- der Teil wo Du Dir die GridBagConstraints zusammenschraubst. Ist immer wieder der gleiche Code. Das schreit förmlich danach, es in eine Methode zu packen.

- Insgesamt zum Desgin: Alle Formular-Komponenten zusammen mit den Daten in eine einzige Klasse zu quetschen ist keine gute Vorgehensweise. Hier trennt man üblicherweise das Ganze nach dem MVC-Konzept (MVC = Modell, View, Control). Hier mal eine kurze Definition aus dem Javabuch von Guido Krüger:




> # Das Modell enthält die Daten des Dialogelements und speichert seinen Zustand.
> # Der View ist für die grafische Darstellung der Komponente verantwortlich.
> # Der Controller wirkt als Verbindungsglied zwischen beiden. Er empfängt Tastatur- und Mausereignisse und stößt die erforderlichen Maßnahmen zur Änderung von Model und View an




Das Modell wäre bei Dir die Klasse Auto, die techn. Infos enthält, wie Reichweite, km-Stand, etc. und geeignete Methoden um darauf zuzugreifen.
Der View wäre das Applet in das Du die Swingelemente wie Textfelder, Labels, etc. fest einbaust.
Der Controler müßte bei Dir die entsprechende ActionListener haben um auf Eingaben zu reagieren und entsprechend die Daten in der Klasse Auto zu verändern und die Veränderungen im Applet anzuzeigen.

- der Zugriff auf Elemente einer Klasse sollte über Getter und Setter erfolgen, also nicht Wagen1.Tankinhalt (Variablen schreibt man übrigens klein) sondern Wagen1.getTankinhalt() (die Methode mußt Du natürlich zusammenschrauben).

So das war's mal so im Groben. Insgesamt hätte ich noch mehr/länger/detaillierter schreiben können, aber mir fehlt die Zeit. 

Bis die Tage.....


----------



## HendsteR (9. Dez 2008)

Vielen Dank!

Ich dachte mir schon fast, dass mir für diesen Code der Kopf abgerissen wird...

ich hab wie gesagt das Thema derzeit im Informatikunterricht und unser Lehrer kennt Java selbst nicht...er muss sich die Sprache selber erstmal beibringen. Keine gute Voraussetzung, um in die Theorie hinter der Sprache einzudringen und sozusagen ihre "Grammatik" zu lernen. 

Das, was ich da jetzt gebastelt hab, ist eher so die Form, dass man mich grad mal so verstehen kann, es aber eigentlich niemand so machen würde. Ich werde mich wohl irgendwann demnächst mit der tiefgreifenden Theorie beschäftigen, sowas braucht einfach mehr Zeit.

Was würdest du mir als Lektüre für den Einstieg empfehlen?

liebe Grüße


----------



## Quaxli (10. Dez 2008)

www.javabuch.de  Dort gibt's das Javabuch von Guido Krüger zum Download. Wäre meine erste Wahl.
Viele empfehlen auch "Java ist auch eine Insel". Das findest Du via Google auch zum freien Download. Mir persönlich gefällt das Javabuch aber besser.
Schau Dir am Besten beide mal an.


----------

