Hilfe bei FocusListener für Taschenrechner

Jats

Aktives Mitglied
Hey, ich schreibe gerade einen Taschenrechner und habe ein paar Probleme .
Zuerst versuche ich mal kurz zu erklären, weshalb ich einen FocusListener benutzen will:

Ich habe zwei Doubles in den Instanzvariablen festgelegt, die im Konstruktor die JTextfields tEingabe1 und tEingabe2 auslesen und wollte halt nachher von jeder Methode aus darauf zugreifen können, sodass ich nicht jedes Mal den Double in einen String konvertieren muss.
Allerdings bekam ich dann das Problem, dass ich die Textfelder am Anfang leer erstellt hatte (also leeren String übergeben hatte) und ich bekam einen NullPointer.
Dann habe ich mir halt gedacht, ich könnte einfach die Zahl "0" eintragen lassen und wollte dem Nutzer allerdings die "Arbeit" ersparen, die Zahl vor der Eingabe entfernen zu müssen.
Also wollte ich einen FocusListener einbauen, der das Textfeld leert, sobald es im Fokus steht.

Ich hoffe, das ist soweit klar :)

Jetzt habe ich allerdings Probleme, den FocusListener in die Klasse zu implementieren, bzw. irgendetwas funktioniert hier nicht.
Hoffentlich kann mir jemand sagen, was ich machen muss, um den Listener richtig einzubauen oder, wie ich das ganze geschickter lösen kann.

Hier mal der Code mit dem bis jetzt, mir am lögiksten erscheinenden Versuch:

Java:
import java.awt.*;
import javax.swing.*;
import java.awt.font.*;
import java.awt.Label.*;
import java.lang.Object.*;
import java.awt.event.*;

public class Taschenrechner extends JFrame implements ActionListener {

    double x;
    double y;
    double ergebnis;
    JTextField tEingabe1;
    JTextField tEingabe2;
    JTextField tAusgabe;

    JButton [] btn = new JButton[18];
    String [] buttonName = {"plus" , "minus" , "mal" , "geteilt" , "Wurzel" , "x^2" , "x^y" , "e^x" , "10^x" , "ln" , "log" , "sin" , "cos" , "tan" , "ggT" , "kgV" , "PI" ,"Ans"};

    public Taschenrechner() {

        JFrame jFr = new JFrame(); 
        setSize(1000,1000);                           
        setBounds(212,84, 800, 800 );
        setLayout(null);   

        setDefaultCloseOperation(3);
        setTitle("Taschenrechner");
        setVisible(true);

        tEingabe1= new JTextField("0");
        tEingabe1.setBounds(70, 350,80,80);
        add(tEingabe1);
        tEingabe1.addFocusListener(listener);

        tEingabe2=new JTextField("0");
        tEingabe2.setBounds(350, 350,80,80);
        add(tEingabe2);
        tEingabe2.addFocusListener(listener);

        tAusgabe=new JTextField("Ergebnis");
        tAusgabe.setBounds(70,440,360,80);
        add(tAusgabe);
        tAusgabe.addFocusListener(listener);

        for (int i=0;i<18;i++) {
            btn[i] = new JButton("");
            btn[i].setText(buttonName[i]);
            btn[i].setBounds(500,30+i*30 , 120, 30);
            add(btn[i]);
            btn[i].addActionListener(this);
        }

        x = new Double(tEingabe1.getText()).doubleValue();
        y = new Double(tEingabe2.getText()).doubleValue();

    }    

    public void focusGained(FocusEvent e) {
        if(e.getSource==tEingabe1){
            tEingabe.setText("");
        }
        if(e.getSource==tEingabe2){
            tEingabe2.setText("");
        }
        if(e.getSource==tAusgabe){
            tAusgabe.setText("");
        }
    }

    public void addieren() {
        ergebnis = x+y;
        tAusgabe.setText(ergebnis+"");        
    }

    public void substrahieren() {
        ergebnis = x-y;
        tAusgabe.setText(ergebnis+"");
    }

    public void multiplizieren() {
        ergebnis = x*y;
        tAusgabe.setText(ergebnis+"");
    }

    public void dividieren() {
        ergebnis = x/y;
        tAusgabe.setText(ergebnis+"");
    }

    public void wurzel() {
        ergebnis = Math.sqrt(x);
        tAusgabe.setText(ergebnis+"");
    }

    public void quadrieren() {
        ergebnis = Math.pow(x,2);
        tAusgabe.setText(ergebnis+"");
    }

    public void potenzieren() {
        ergebnis = Math.pow(x,y);
        tAusgabe.setText(ergebnis+"");
    }

    public void ehochx() {
        ergebnis = Math.pow(Math.E,y);
        tAusgabe.setText(ergebnis+"");
    }

    public void ZehnHochx() {
        ergebnis = Math.pow(10,x);
        tAusgabe.setText(ergebnis+"");
    }

    public void ln() {
        ergebnis = Math.log(x);
        tAusgabe.setText(ergebnis+"");
    }

    public void log() {      
        ergebnis = Math.log(x)/Math.log(y);
        tAusgabe.setText(ergebnis+"");
    }

    public void sin() {
        v = Math.sin(x);
        tAusgabe.setText(ergebnis+"");
    }

    public void cos() {
        ergebnis = Math.cos(x);
        tAusgabe.setText(ergebnis+"");
    }

    public void tan() {
        ergebnis = Math.tan(x);
        tAusgabe.setText(ergebnis+"");
    }

    public double ggT(double zahl1, double zahl2) {
        double r;
        do {
            r = x%y;
            x = y;
            y = r;
        }
        while(y!=0);
        return x;
    }

    public void kgV() {
        double c = x;
        double d = y;
        tAusgabe.setText(x*y/ggT(c,d)+"");
    }

    public void actionPerformed(ActionEvent e) {

        if (e.getSource()==btn[0]) {
            addieren();
        }

        if (e.getSource()==btn[1]) {
            substrahieren();
        }

        if (e.getSource()==btn[2]) {
            multiplizieren();
        }

        if (e.getSource()==btn[3]) {
            dividieren();
        }

        if (e.getSource()==btn[4]) {
            wurzel();
        }

        if (e.getSource()==btn[5]) {
            quadrieren();
        }

        if (e.getSource()==btn[6]) {
            potenzieren();
        }

        if (e.getSource()==btn[7]) {
            ehochx();
        }

        if (e.getSource()==btn[8]) {
            ZehnHochx();
        }

        if (e.getSource()==btn[9]) {
            ln();
        }

        if (e.getSource()==btn[10]) {
            log();
        }

        if (e.getSource()==btn[11]) {
            sin();
        }

        if (e.getSource()==btn[12]) {
            cos();
        }

        if (e.getSource()==btn[13]) {
            tan();
        }

        if (e.getSource()==btn[14]) {
            ggT(x,y);
        }

    }

}

Ich hoffe, mir kann jemand helfen :)
Danke schonmal
 

eRaaaa

Top Contributor
Autsch!
Also erst mal: [c]tEingabe1.addFocusListener(listener);[/c] Was ist listener? Das kommt doch nicht von irgendwoher. Aber da du schon eine focusGained mitten in die Klasse geschrieben hast, soll vemrutlich deine Klasse selbst der Listener sein(so wie du es also auch schon mit dem ActionListener gemacht hast, das ist doch nichts anderes!) Dann fehlt allerdings nach implements ActionListener noch das , Focuslistener --> implements ActionListener,FocusListener sowie die Methode
Java:
	@Override
	public void focusLost(FocusEvent e) {
	}
! Und dann musst du auch nicht addFocusListener(listener) sagen sondern addFocusListener(this)

Evtl. noch einmal lesen :rtfm:: Lesson: Writing Event Listeners (The Java™ Tutorials > Creating a GUI With JFC/Swing)

Ausserdem hast du noch jede Menge andere Fehler, z.B. heißt es if(e.getSource()==tEingabe1){ das ist ein Methodenaufruf, da gehören Klammern dran! tEingabe.setText(""); gibts auch nicht --> tEingabe1. wenn schon!
Java:
    public void sin() {
        v = Math.sin(x);
        tAusgabe.setText(ergebnis+"");
    }

ka wo das "v" herkommt :)
 

Jats

Aktives Mitglied
Okay, danke .
Das ich den FocusListener implementieren muss weiß ich ja, nur ich habe dann eine Fehlermeldung bekommen, die Klasse Taschenrechner sei nicht abstrakt.
EDIT: Das mit dem (listener) hatte ich noch nicht korrigiert, da ich auch mal eine Klasse hatte, die listener hieß und das Teil sollte dann im Konstruktor stehen und so weiter .. :oops:
Und das v kommt davon, dass ich das Wort "ergebnis" der Schnelligkeit halber immer vor der Rechenoperation über die Zwischenablage reinkopiert habe .

Aber ich werde mal so versuchen .. die anderen Fehler hätte ich schon noch bemerkt, aber BlueJ zeigt die ja nach der Reihe an und der FocusListener steht ja vor den ganzen Methoden .. Flüchtigkeitrsfehker ;)

Auf jeden Fall danke, ich versuche mich mal dran.
EDIT2: Alles klar, das hat soweit funktioniert, keine Fehler mehr, allerdings kommt bei mir bei jeder Rechenfunktion null heraus !?
Ich gehe davon aus, dass etwas mit den Variablen nicht stimmt .. aber eigentlich sind die doch richtig deklartiert oder werden die jetzt gar nicht ausgelesen ?
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Du schreibst
Java:
        x = new Double(tEingabe1.getText()).doubleValue();
        y = new Double(tEingabe2.getText()).doubleValue();
direkt im Konstruktor! Also dort wo das Objekt erstellt wird.... zu diesem Zeitpunkt wurde doch noch gar nichts in die Textfelder eingetragen, wie soll da bei x und y was anderes raus kommen als 0 ? Verschiebe diese beiden Zeilen mal in deine actionPerformed vor
Code:
if (e.getSource()==btn[0]) {
Weiterhin würde ich dir raten [c]setVisible(true)[/c] erst gaaanz am Ende deines Konstruktors aufzurufen, sonst kann es passieren dass einige Buttons/Komponenten fehlen.
 

Jats

Aktives Mitglied
Du schreibst
Java:
        x = new Double(tEingabe1.getText()).doubleValue();
        y = new Double(tEingabe2.getText()).doubleValue();
direkt im Konstruktor! Also dort wo das Objekt erstellt wird.... zu diesem Zeitpunkt wurde doch noch gar nichts in die Textfelder eingetragen, wie soll da bei x und y was anderes raus kommen als 0 ? Verschiebe diese beiden Zeilen mal in deine actionPerformed vor
Code:
if (e.getSource()==btn[0]) {
Weiterhin würde ich dir raten [c]setVisible(true)[/c] erst gaaanz am Ende deines Konstruktors aufzurufen, sonst kann es passieren dass einige Buttons/Komponenten fehlen.

Vielen Dank, habe ich geändert .. setVisible stand mal ganz unten, aber ich habe wohl alles andere achtlos darunter geschrieben ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Hilfe bei dem Erstellen einer SQL Abfrage aus gewählten JComboBoxen AWT, Swing, JavaFX & SWT 5
JavaBeginner22 Button Hilfe AWT, Swing, JavaFX & SWT 0
ExceptionOfExpectation Textdarstellung auf einem Canvas mit Hilfe von repaint(); AWT, Swing, JavaFX & SWT 6
senol JOptionPane hilfe!!! :(((( AWT, Swing, JavaFX & SWT 32
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
J Swing Hilfe bei Layout AWT, Swing, JavaFX & SWT 2
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
F BorderLayout Hilfe bei Anzeige AWT, Swing, JavaFX & SWT 2
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
T Swing Hilfe - Selbst Informatik Lehrer konnte mir nicht weiter Helfen AWT, Swing, JavaFX & SWT 2
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
A Swing TicTacToe-Bitte um Hilfe AWT, Swing, JavaFX & SWT 32
T Bitte um Hilfe AWT, Swing, JavaFX & SWT 2
T Hilfe bei Code AWT, Swing, JavaFX & SWT 2
S Hilfe bei Java Gui Anfänger AWT, Swing, JavaFX & SWT 5
J Warum geht das nicht? if-else usw..... compilieren geht nicht -- HILFE!!! AWT, Swing, JavaFX & SWT 10
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
T Hilfe was mus ich tun um das fertige JfxFenster zu sehen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
A hilfe für flowlayout AWT, Swing, JavaFX & SWT 6
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
V Swing Brauche Hilfe mit Label AWT, Swing, JavaFX & SWT 3
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
T Swing JTable Zeile mit ausgelesenen Werten mit Hilfe von einem Button hinzufügen AWT, Swing, JavaFX & SWT 1
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
H Swing Hilfe bei GUI AWT, Swing, JavaFX & SWT 4
T HILFE wie lösche ich gezeichnetes per tastendruck AWT, Swing, JavaFX & SWT 1
R Swing JOptionPane Fehlermeldung- bitte um Hilfe! AWT, Swing, JavaFX & SWT 4
Tausendsassa ImageIcon?! Hilfe! AWT, Swing, JavaFX & SWT 10
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
J GridBagLayout mit Hilfe einer For-Schleife befüllen AWT, Swing, JavaFX & SWT 1
M Hilfe bei Performanceverbesserung AWT, Swing, JavaFX & SWT 34
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
M SwingWorker Hilfe! AWT, Swing, JavaFX & SWT 10
K Swing Brauche Hilfe AWT, Swing, JavaFX & SWT 6
O AWT Performance und Bug behebung[brauche Hilfe] AWT, Swing, JavaFX & SWT 2
K Swing Konsolen Programm in GUI - Suche Hilfe bei Konsolenausgabe AWT, Swing, JavaFX & SWT 2
K Viele Textfield mit Hilfe eines MousListener leeren - möglich? AWT, Swing, JavaFX & SWT 8
I ausgewählte Zeile mit Hilfe der Tastatur löschen! AWT, Swing, JavaFX & SWT 3
Kenan89 Java FX GUI Hilfe für erste Java FX App AWT, Swing, JavaFX & SWT 8
B Rechteck Mit Hilfe Von Timeline, KeyFrames animieren AWT, Swing, JavaFX & SWT 3
J LayoutManager Hilfe bei Wahl des Layouts AWT, Swing, JavaFX & SWT 9
F Hilfe beim ausschalten von Robot AWT, Swing, JavaFX & SWT 7
N Hilfe bei Memory-Spiel AWT, Swing, JavaFX & SWT 18
L Swing Hilfe bei JTabelModel gesucht AWT, Swing, JavaFX & SWT 4
B Hilfe zu JTable und JTabbedPane AWT, Swing, JavaFX & SWT 18
K Hilfe bei Labels AWT, Swing, JavaFX & SWT 3
S Hilfe beim Lernprozess von java3d AWT, Swing, JavaFX & SWT 20
T JLayeredPanel - Hilfe AWT, Swing, JavaFX & SWT 7
C Swing Hilfe bei umsetzung eines Stundenplans. AWT, Swing, JavaFX & SWT 7
K Swing Hilfe beim JTree! AWT, Swing, JavaFX & SWT 3
N Hilfe bei Panels! AWT, Swing, JavaFX & SWT 11
F Swing Syntaxhighlighting Hilfe AWT, Swing, JavaFX & SWT 5
Jats Bitte um Hilfe bei JComboBox mit Array AWT, Swing, JavaFX & SWT 6
N Swing nach Fensterrand Action ausführen? HILFE AWT, Swing, JavaFX & SWT 7
R Hilfe bei Bachelorrabeit. Seitenvorschau AWT, Swing, JavaFX & SWT 7
L Mein Kopf dreht sich... Brauche Hilfe beim GUI gestalten AWT, Swing, JavaFX & SWT 10
G Swing Hilfe-Fenster erstellen AWT, Swing, JavaFX & SWT 20
E LayoutManager Hilfe ein GridbagLayout!! AWT, Swing, JavaFX & SWT 7
K GUI-Hilfe für Anfänger AWT, Swing, JavaFX & SWT 15
J Schulprojekt und braucht hilfe AWT, Swing, JavaFX & SWT 54
G Hilfe! Command Pattern an easy ImageViewer? AWT, Swing, JavaFX & SWT 13
radiac Hilfe bei GUI AWT, Swing, JavaFX & SWT 22
N Hilfe bei erstellen eines Bibliotheksprogrammes AWT, Swing, JavaFX & SWT 15
H Swing Jtable wird nicht angezeigt..hilfe!! AWT, Swing, JavaFX & SWT 16
M DRINGEND HILFE TextPane RECHTSBÜNDIG AWT, Swing, JavaFX & SWT 2
B Swing Hilfe zu JTextField AWT, Swing, JavaFX & SWT 2
J Brauche ganz dringend Hilfe!!! AWT, Swing, JavaFX & SWT 5
V Bitte um Hilfe bei nem Taschenrechner AWT, Swing, JavaFX & SWT 8
F NullPointerException - HILFE!! AWT, Swing, JavaFX & SWT 20
G Hilfe!!!Sudoku AWT, Swing, JavaFX & SWT 19
M Swing JButton hilfe AWT, Swing, JavaFX & SWT 3
M brauche Hilfe um Einträge aus Jlist zu löschen AWT, Swing, JavaFX & SWT 4
Spin Hilfe - Erklärungsbedarf für Kreis AWT, Swing, JavaFX & SWT 5
O Bitte um Hilfe bei ComboBox in TableHeader AWT, Swing, JavaFX & SWT 9
M Erstellen eines Hilfe-Fenster bzw"Erste-Schritte" AWT, Swing, JavaFX & SWT 2
G Hilfe beim Erstellen eines eigenen Html-Editors! AWT, Swing, JavaFX & SWT 4
G Hilfe Meine JPanels verschwinden im Müll AWT, Swing, JavaFX & SWT 10
G Hilfe AWT, Swing, JavaFX & SWT 8
N ausrichtung Button - hilfe bitte AWT, Swing, JavaFX & SWT 2
T Hilfe zu Events? AWT, Swing, JavaFX & SWT 6
A Ini Datei Auswerten - HILFE! AWT, Swing, JavaFX & SWT 6
D Hilfe bei GUI-Elementen in Java AWT, Swing, JavaFX & SWT 9
D Grafikeinsteiger sucht/braucht Hilfe. Wäre Nett ! AWT, Swing, JavaFX & SWT 3
K Mein Informatikprojekt läuft aus dem Ruder Hilfe. F1 ^^ AWT, Swing, JavaFX & SWT 5
S Hilfe! Bekomme Daten nicht ausgelesen AWT, Swing, JavaFX & SWT 3
M hilfe! probleme mit meinem programm AWT, Swing, JavaFX & SWT 5
V Hilfe :( bekomme textarea nicht versetzt AWT, Swing, JavaFX & SWT 2
M Hilfe ich komme nicht an ein JTextArea AWT, Swing, JavaFX & SWT 4
J Hilfe CardLayout AWT, Swing, JavaFX & SWT 3
C Hilfe bei JInternalFrame AWT, Swing, JavaFX & SWT 6
G BubbleSort mit Hilfe einer Balkengrafik visualisieren AWT, Swing, JavaFX & SWT 9
G Leider trotz allem kein Icon :( Brauche Hilfe AWT, Swing, JavaFX & SWT 3
S sinuskurve hilfe! AWT, Swing, JavaFX & SWT 2
D JSplittPane - unsichtbarer Rahmen? hilfe ;) AWT, Swing, JavaFX & SWT 2
G Selbstprogrammierter Editor - brauche Hilfe AWT, Swing, JavaFX & SWT 5
J Hilfe bei EventListening AWT, Swing, JavaFX & SWT 3
M Hilfe bei vers. Fonts und Zeilenlänge in eigenem Editor. AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben