Problem mit paint(Graphics g) im Applet

Dogge

Aktives Mitglied
In meinem Applet soll nach drücken der "Löschen Taste" die paint Ausgabe in einen leeren String verwandelt werden.Iich nutze für paint die Graphics Methode drawString.
s2=""; ist mein String Parameter/Variable
Java:
import java.applet.*;
import java.awt.event.*;
import java.awt.*;

public class MittelwertApplet3 extends Applet implements ActionListener,WindowListener {

      Label labText;
      TextField tfMittelwert1;
      TextField tfMittelwert2;
      TextField tfErgebnis;
      Button bMittelwertr;
      Button bMittelwertl; 
      double g,f,h;
      String s3; 

      Font fntFett, fntAusgabe;
      
     
      public void init() {
           setLayout(null);
           setSize(400,400);
           

           
          
            
           fntFett=new Font("SansSerif",1,14);
           fntAusgabe= new Font("SansSerif",1,20);
      
           labText=new Label("Dieses Applet berechnet Mittelwerte");
           labText.setFont(fntFett);
           labText.setBounds(50,50,350,25);
           add(labText);

           tfMittelwert1=new TextField("");
           tfMittelwert1.setFont(fntAusgabe);
           tfMittelwert1.setBounds(50,100,150,25);
           add(tfMittelwert1);
 
           tfMittelwert2=new TextField("");
           tfMittelwert2.setFont(fntAusgabe);
           tfMittelwert2.setBounds(250,100,150,25);
           add(tfMittelwert2);

           bMittelwertr=new Button("Rechne Mittelwert");
           bMittelwertr.setFont(fntFett);
           bMittelwertr.setBounds(150,125,150,25);
           bMittelwertr.addActionListener(this);
           add(bMittelwertr);
           
           bMittelwertl=new Button("Loeschen");
           bMittelwertl.setFont(fntFett);
           bMittelwertl.setBounds(150,225,150,25);
           bMittelwertl.addActionListener(this);
           add(bMittelwertl);
 
           tfErgebnis=new TextField("");
           tfErgebnis.setFont(fntAusgabe);
           tfErgebnis.setBounds(150,175,150,25);
           add(tfErgebnis);

           setVisible(true);
        
    }
  
    public void windowClosing (WindowEvent e) {
         
         System.exit(0);
    }

    public void windowClosed(WindowEvent e){}
    public void windowOpened(WindowEvent e) {}
    public void windowActivated (WindowEvent e) {}
    public void windowDeactivated(WindowEvent e){}
    public void windowIconified(WindowEvent e) {}
    public void windowDeiconified(WindowEvent e){}
      
      public void actionPerformed(ActionEvent e) {
            
           if(e.getSource()==bMittelwertr) {
             bMittelwertrClicked();
           }
           if(e.getSource()==bMittelwertl) {
             bMittelwertlClicked();
           }
      }
      
   
      public void bMittelwertrClicked() {
       
           String s1 = tfMittelwert1.getText();
           Double doubleObj1 = Double.valueOf(s1);
           f = doubleObj1.doubleValue();

           String s2 = tfMittelwert2.getText();
           Double doubleObj2=Double.valueOf(s2);
           g = doubleObj2.doubleValue();
           
           h=(f+g)/2;
           Double doubleObj3;
           doubleObj3 = new Double(h);
           s3 = doubleObj3.toString();
           
           
           tfErgebnis.setVisible(false);

           
      }



      public void bMittelwertlClicked() {

           tfMittelwert1.setText("");
           tfMittelwert2.setText("");
           tfErgebnis.setText("");
           
           s3="";
           paint(g);
           
      }
     
      public void paint(Graphics g) {
           

           
           g.drawString(s3,158,190);
      }
}
 
In meinem Applet soll nach drücken der "Löschen Taste" die paint Ausgabe in einen leeren String verwandelt werden.Iich nutze für paint die Graphics Methode drawString.
s2=""; ist mein String Parameter/Variable
Java:
import java.applet.*;
import java.awt.event.*;
import java.awt.*;

public class MittelwertApplet3 extends Applet implements ActionListener,WindowListener {

      Label labText;
      TextField tfMittelwert1;
      TextField tfMittelwert2;
      TextField tfErgebnis;
      Button bMittelwertr;
      Button bMittelwertl; 
      double g,f,h;
      String s3; 

      Font fntFett, fntAusgabe;
      
     
      public void init() {
           setLayout(null);
           setSize(400,400);
           

           
          
            
           fntFett=new Font("SansSerif",1,14);
           fntAusgabe= new Font("SansSerif",1,20);
      
           labText=new Label("Dieses Applet berechnet Mittelwerte");
           labText.setFont(fntFett);
           labText.setBounds(50,50,350,25);
           add(labText);

           tfMittelwert1=new TextField("");
           tfMittelwert1.setFont(fntAusgabe);
           tfMittelwert1.setBounds(50,100,150,25);
           add(tfMittelwert1);
 
           tfMittelwert2=new TextField("");
           tfMittelwert2.setFont(fntAusgabe);
           tfMittelwert2.setBounds(250,100,150,25);
           add(tfMittelwert2);

           bMittelwertr=new Button("Rechne Mittelwert");
           bMittelwertr.setFont(fntFett);
           bMittelwertr.setBounds(150,125,150,25);
           bMittelwertr.addActionListener(this);
           add(bMittelwertr);
           
           bMittelwertl=new Button("Loeschen");
           bMittelwertl.setFont(fntFett);
           bMittelwertl.setBounds(150,225,150,25);
           bMittelwertl.addActionListener(this);
           add(bMittelwertl);
 
           tfErgebnis=new TextField("");
           tfErgebnis.setFont(fntAusgabe);
           tfErgebnis.setBounds(150,175,150,25);
           add(tfErgebnis);

           setVisible(true);
        
    }
  
    public void windowClosing (WindowEvent e) {
         
         System.exit(0);
    }

    public void windowClosed(WindowEvent e){}
    public void windowOpened(WindowEvent e) {}
    public void windowActivated (WindowEvent e) {}
    public void windowDeactivated(WindowEvent e){}
    public void windowIconified(WindowEvent e) {}
    public void windowDeiconified(WindowEvent e){}
      
      public void actionPerformed(ActionEvent e) {
            
           if(e.getSource()==bMittelwertr) {
             bMittelwertrClicked();
           }
           if(e.getSource()==bMittelwertl) {
             bMittelwertlClicked();
           }
      }
      
   
      public void bMittelwertrClicked() {
       
           String s1 = tfMittelwert1.getText();
           Double doubleObj1 = Double.valueOf(s1);
           f = doubleObj1.doubleValue();

           String s2 = tfMittelwert2.getText();
           Double doubleObj2=Double.valueOf(s2);
           g = doubleObj2.doubleValue();
           
           h=(f+g)/2;
           Double doubleObj3;
           doubleObj3 = new Double(h);
           s3 = doubleObj3.toString();
           
           
           tfErgebnis.setVisible(false);

           
      }



      public void bMittelwertlClicked() {

           tfMittelwert1.setText("");
           tfMittelwert2.setText("");
           tfErgebnis.setText("");
           
           s3="";
           paint(g);
           
      }
     
      public void paint(Graphics g) {
           

           
           g.drawString(s3,158,190);
      }
}

Ab Zeile 113 steht das Relevante. bMittelwertl ist "Löschen-Taste". Es funktioniert alles, wenn die paint Methode aus bMittelwertlClicked entfernt wird. s3 von vorhin bleibt ABER eingezeichnet.
Was nun?
 
> Es funktioniert alles, wenn die paint Methode aus bMittelwertlClicked entfernt wird.
was funktioniert denn nicht, wenn der Aufruf bleibt?
ok, das dort übergebende g ist wohl eine double-Variable..

richtiger ist so oder so der Aufruf repaint();
 
public void bMittelwertlClicked() {

tfMittelwert1.setText("");
tfMittelwert2.setText("");
tfErgebnis.setText("");

s3="";
paint(g);

}

public void paint(Graphics g) {



g.drawString(s3,158,190);
}
}






[/code]

Nun aufs Neue mit meinem Zitat. Hat jemand eine Ahnung? Mit einer Konstruktormethode in der init() Methode hab ich es auch versucht(...ohne Erfolg)(MittelwertApplet3 b = new MittelwertApplet3();in init()) und dann in bMittelwertClicked b.paint(g);
 
siehe auch mein Post zuvor
und was hast du bei deinem Zitat gemacht? die Quote-Tags belassen und nur ein schließendes [ / JAVA ] eingefügt?
nicht so sparsam, da gehört mehr dazu..
 
Fehlermeldung bei Konstr.Methode war cannot resolve Variable b.
Irgendwas stimmt da nicht. Dann bab ich das rückgängig gemacht und nur paint(g) bei bMittelwertlClicked() geschrieben. Nächste Fehlermeldung: cannot resolve symbol , symbol :method paint(double)

Zu SlaterB: Ich habe zwischen alles gelöscht was ich nicht brauchte. Oder was meinst du? [/code] ist irgendwie reingekommen.

zwischen quote /quote

Nun aufs Neue mit meinem Zitat. Hat jemand eine Ahnung? Mit einer Konstruktormethode in der init() Methode hab ich es auch versucht(...ohne Erfolg)(MittelwertApplet3 b = new MittelwertApplet3();in init()) und dann in bMittelwertClicked b.paint(g);


Schluss mit den Zitaten. Das lenkt zu viel ab.🙂
 
> Nächste Fehlermeldung: cannot resolve symbol , symbol :method paint(double)

ich hab ja schon geschrieben dass g ein double ist, die Fehlermeldung sollte klar sein oder was erwartest du was Java mit deinen double g macht?
ein Graphics-Objekt wirst du nicht sinnvoll herzaubern können, aber musst du auch nicht, siehe eines meiner Posts zuvor
 
SlaterB ich kann nicht bzw. darf nur paint verwenden. Es geht darum das ich h=(f+g)/2 mit paint ausgeben soll. Eine Idee? Ich hab alles von Double in String verwandelt und wieder zurück, damit ich drawString verwenden kann.

drawString(); natürlich.

:idea::idea:
Ich habe g von (Graphics g) und noch g als double Wert. Hab ich leider übersehen. Mein Fehler.
 
Funktioniert leider nicht wie es soll. Ich geb den Versuch auf. Es funzt zwar 😱, muss aber das Applet oben rechts am Fenster (_-klicken)minimieren damit der paint Eintrag verschwindet. Schade.
Ih habe paint aus bMittelwertlClicked() rausgenommen.

@SlaterB: wie soll ich eigentlich repaint() verwenden bzw. wo einsetzen?
hab es in bMittelwertlClicked eingesetzt ohne Erfolg; bzw. da sollte noch mehr stehen, denn sonst wird der zuvor gespeicherte Wert verwendet? Kapier ich nicht.

"nicht sprechende( kurze )Bezeichner" - diesen Ausdruck kenne ich ncht. Inwiefern können Bezeichner sprechen?
Das ich für verschiedene Dinge den gleichen Bezeichner verwendet hab?
 
da wo bisher der paint-Aufruf steht, offensichtlich,
wie ich grad selber getestet habe natürlich besser in bMittelwertrClicked() genauso, da vor allem soll ja erst der Text erscheinen,

dass du an gleicher Stelle in der GUI ein Textfeld eingefügt hast, machst das ganze natürlich verworrender,
dass dort zusammen mit setVisible(true/false) alles funktioniert ist mir relativ gleich, sowas baut man einfach nicht,

wenn du ein TextFeld willst, dann nimm das, dort kannst du den Mittelwert auch reinschreiben,
wenn nicht dann male nur mit paint an dieser Stelle

noch mehr würde ich gar generell vermeiden, in einem Panel/ einer Komponente gleichzeitig zu malen als auch Sub-Komponenten einzufügen,
die Lösung wäre dann z.B., an der fraglichen Stelle ein Panel einzufügen, und in diesem Panel die paint-Methode zu überschreiben,
bei derartigen paint-Panel muss man allgemein auf Setzen der Size achten, bei null-Layout und setBounds() wäre das aber eh der Fall

> Inwiefern können Bezeichner sprechen?

graph statt g würde eher verraten == sprechen, was sich hinter der Variablen versteckt,
wie man sieht hält sich aber selbst die API nicht unbedingt daran,
ist schon relativ normal, a, b, c usw. zu verwenden..,
eine andere Frage allerdings, ob man das dann unkommentiert auf ein Forum loslässt..
 

Zurück
Oben