Grafik verschwindet durch Größenveränderung von GridBag

Status
Nicht offen für weitere Antworten.

HendsteR

Mitglied
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

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

HendsteR

Mitglied
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....

Code:
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

Top Contributor
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:

Code:
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

Mitglied
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

Top Contributor
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. ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Feste Blöcke mit Grafik Spiele- und Multimedia-Programmierung 9
Anfänger2011 Wichtig: Grafik und Sprites erstellen Spiele- und Multimedia-Programmierung 1
T grafik in bereiche einteilen (dartboard) Spiele- und Multimedia-Programmierung 14
T LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac Spiele- und Multimedia-Programmierung 19
S Wolken Bild/Grafik vom Programm erstellen lassen Spiele- und Multimedia-Programmierung 11
Luk10 Tipps für bessere Animationen / Grafik Engine Spiele- und Multimedia-Programmierung 2
M Einen Hobby Game - / Grafik Designer zu finden (Screenshot vom Spiel) Spiele- und Multimedia-Programmierung 7
D einfache 2D Grafik in JAVA. absoluter Anfänger Spiele- und Multimedia-Programmierung 5
R 2D Grafik JOGL Spiele- und Multimedia-Programmierung 18
Developer_X 3D Grafik Formeln Spiele- und Multimedia-Programmierung 35
S Grafik erstellen für Java Spiel Spiele- und Multimedia-Programmierung 8
Developer_X Java3D Grafik Boni Spiele- und Multimedia-Programmierung 8
N Felder auf Grafik Spiele- und Multimedia-Programmierung 2
R Grafik-Engine? MemoryImageSource? Spiele- und Multimedia-Programmierung 10
E Tester mit Intels Onboard-Grafik (o.ä.) gesucht! Spiele- und Multimedia-Programmierung 28
N Grafik als Hintergrund eines Rechtecks verwenden? Spiele- und Multimedia-Programmierung 4
G Entscheidungshilfe: Grafik-API Spiele- und Multimedia-Programmierung 5
T Spiel mit schöner Grafik, bitte testen Spiele- und Multimedia-Programmierung 10
V Wie bewege ich eine eingefügte Grafik (img) ? Spiele- und Multimedia-Programmierung 2
S Wie kann ich das Zeichnen der Grafik feiner machen? Spiele- und Multimedia-Programmierung 9
1 JOGL: Fensterinhalt verschwindet sofort wieder Spiele- und Multimedia-Programmierung 3
F Szene flackert / verschwindet - Float-Ungenauigkeit! Spiele- und Multimedia-Programmierung 4
casca Steinreihe verschwindet komplett Spiele- und Multimedia-Programmierung 6
V Szene verschwindet? zu weit weg? Spiele- und Multimedia-Programmierung 4
P Zahlenwert durch Methode ersetzen Spiele- und Multimedia-Programmierung 1
D Iterieren durch einen Ordner mit Audiodateien und verketten eine andere Audiodatei Spiele- und Multimedia-Programmierung 17
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
R Durch String Platform Game erstellen Spiele- und Multimedia-Programmierung 8
lord239123 JMonkey Schatten werden durch Terrain hindurch angezeigt Spiele- und Multimedia-Programmierung 1
R Mp3 Rating (POPM) durch JAudioTagger? Spiele- und Multimedia-Programmierung 2
M Objekte verschwinden durch Explosion Spiele- und Multimedia-Programmierung 2
B j3d Kamera Rotation durch Tastendruck Spiele- und Multimedia-Programmierung 12
I Framerate-Einbrüche durch Synchronisation Spiele- und Multimedia-Programmierung 12
E [JAVA3D] Schattenstrich durch die Szene Spiele- und Multimedia-Programmierung 4
N Zufallserzeugung durch KI Spiele- und Multimedia-Programmierung 23
S Hilfe: Ich sehe durch die ganze Api's nicht mehr durch! Spiele- und Multimedia-Programmierung 15
Fu3L Extreme Prozessorauslastung durch Hintergrundbild Spiele- und Multimedia-Programmierung 5
B Animation durch Button auslösen Spiele- und Multimedia-Programmierung 2
D Polygonsize durch das umliegende Reckteck verändern inJava2D Spiele- und Multimedia-Programmierung 6
S Fehlerhafte Darstellung durch Transparenz? Spiele- und Multimedia-Programmierung 8
A durch Objekte hindurchzoomen Spiele- und Multimedia-Programmierung 2
masta // thomas Kollisionsabfrage - inspiriert durch "pixelgenaue Kolli Spiele- und Multimedia-Programmierung 13
E Durch Klick auf den JButton will ich die Farbe ändern? Spiele- und Multimedia-Programmierung 8
R Enorme Leistungseinbußen durch Alphakanäle Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben