Ich benutze Eclipse, um einen Rechner zu bauen, und ich habe Probleme, weil ich 2 Werte vom Benutzer eingegeben haben muss. Hier ist mein Code für die Laufklasse.Wie erhalte ich Benutzereingaben von einem TextField und wandle sie in Double um?
import display.Gui;
public class Main {
public static void main(String argsp[]) {
Gui window = new Gui();
double a = 0, b = 0, c = 0;
String operator;
boolean calculate = true;
window.setVisible(true);
window.setSize(500, 400);
window.setResizable(false);
window.setLocationRelativeTo(null);
while (calculate) {
window.textArea_1.append("Enter an equation.\n");
a = Double.parseDouble(window.textField.getText());
operator = window.textField.getText();
b = Double.parseDouble(window.textField.getText());
if (operator.contains("+"))
c = a + b;
if (operator.contains("-"))
c = a - b;
if (operator.contains("*"))
c = a * b;
if (operator.contains("/"))
c = a/b;
if (operator.contains("x^2"))
c = a * a;
if (operator.contains("sqrt"))
c = Math.sqrt(a);
if (operator.contains("%"))
c = a/100;
window.textArea.append("" + c + "\n");
window.textArea.append("");
window.textArea.append("Would you like to make another calculation? [Yes/No]\n");
String calculation = window.textField.getText();
try {
if (calculation.equalsIgnoreCase("Yes"))
calculate = true;
if (calculation.equalsIgnoreCase("No"))
calculate = false;
} catch (Exception e) {
window.textArea_1.append("Please enter yes or no");
}
}
}
}
und hier ist meine Klasse für die JFrame:
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import java.awt.BorderLayout;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Gui extends JFrame {
public JTextArea textArea, textArea_1;
public JTextField textField;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Gui frame = new Gui();
frame.setVisible(false);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Gui() {
setBounds(100, 100, 450, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(new BorderLayout(0, 0));
textField = new JTextField();
textField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent Ev) {
textArea.append(textField.getText() + "\n");
textField.setText("");
}
});
textField.requestFocus();
getContentPane().add(textField, BorderLayout.SOUTH);
textField.setColumns(10);
textArea = new JTextArea();
textArea.setEditable(false);
textArea.setPreferredSize(new Dimension(215, 200));
getContentPane().add(textArea, BorderLayout.WEST);
textArea_1 = new JTextArea();
textArea_1.setEditable(false);
textArea_1.setPreferredSize(new Dimension(215, 200));
getContentPane().add(textArea_1, BorderLayout.EAST);
}
ich versuchte Double.parseDouble(window.textField.getText());
verwenden, aber das hat nicht funktioniert. Wie kann ich es zum Laufen bringen? Vielen Dank im Voraus.
Was hat es getan? Hat es einen Fehler geworfen oder nicht kompiliert. Bitte präzisieren Sie [was Sie versucht haben] (http://whathaveyoutried.com) –
Sie rufen 'Double.parseDouble (...)', bevor der Benutzer die Möglichkeit hatte, etwas in die Textfelder einzugeben. Fügen Sie eine print-Anweisung vor der 'parseDouble'-Anweisung hinzu, um den Wert von' window.textField.getText() 'zu sehen, und Sie werden sehen, dass es leer ist. – assylias
Und erstellen Sie Ihre GUI in der EDT (wie Sie es im zweiten Code-Snippet getan haben). – assylias