Używam Eclipse do zbudowania kalkulatora i mam problemy, ponieważ potrzebuję 2 wartości wprowadzonych przez użytkownika. Oto mój kod dla klasy run.W jaki sposób uzyskać dane wejściowe użytkownika z pola tekstowego i przekonwertować je na podwójne?
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");
}
}
}
}
i tu jest moja klasa dla 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);
}
Próbowałem za pomocą Double.parseDouble(window.textField.getText());
ale to nie działa. Jak mogę to sprawić? Z góry dzięki.
Co to zrobiło? Zrobił błąd lub nie skompilował. Dokładnie opisz [to, co próbujesz] (http://whathaveyoutried.com) –
Zadzwoń pod "Double.parseDouble (...)", zanim użytkownik będzie miał szansę wprowadzić cokolwiek w polach tekstowych. Dodaj instrukcję print przed instrukcją 'parseDouble', aby zobaczyć wartość' window.textField.getText() ', a zobaczysz, że jest pusta. – assylias
Stwórz swój GUI w EDT (tak jak zrobiłeś to w drugim fragmencie kodu). – assylias