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:
Ich hoffe, mir kann jemand helfen
Danke schonmal
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