Java 面积计算器不工作,不确定原因
这是我在eclipse windowbuilder中构建的计算器的源代码,我试图让两个文本字段读取输入并输出一个简单矩形的区域,我可以在框中键入数字,但是数字无法计算,我不知道我可能做错了什么,请评论我的代码,让我知道为什么它不工作。多谢各位 *编辑,我已经删除并更改了一些内容,现在答案框显示0.0,没有其他内容Java 面积计算器不工作,不确定原因,java,eclipse,swing,calculator,windowbuilder,Java,Eclipse,Swing,Calculator,Windowbuilder,这是我在eclipse windowbuilder中构建的计算器的源代码,我试图让两个文本字段读取输入并输出一个简单矩形的区域,我可以在框中键入数字,但是数字无法计算,我不知道我可能做错了什么,请评论我的代码,让我知道为什么它不工作。多谢各位 *编辑,我已经删除并更改了一些内容,现在答案框显示0.0,没有其他内容 import java.awt.EventQueue; public class GUI { private JFrame frame; private JTextFie
import java.awt.EventQueue;
public class GUI {
private JFrame frame;
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI window = new GUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public GUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 694, 499);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);
JPanel panel = new JPanel();
tabbedPane.addTab("New tab", null, panel, null);
panel.setLayout(null);
JLabel lblInputBase = new JLabel("Input Base");
lblInputBase.setBounds(0, 0, 57, 39);
panel.add(lblInputBase);
textField = new JTextField();
textField.setBounds(0, 28, 86, 20);
panel.add(textField);
textField.setColumns(10);
double value = Double.parseDouble(textField.getText());
JLabel lblInputHeight = new JLabel("Input Height");
lblInputHeight.setBounds(0, 212, 68, 20);
panel.add(lblInputHeight);
textField_1 = new JTextField();
textField_1.setBounds(0, 230, 86, 20);
panel.add(textField_1);
textField_1.setColumns(10);
double value_1 = Double.parseDouble(textField_1.getText());
double Area = value*value_1;
String finalArea = Double.toString(Area);
JLabel lblArea = new JLabel("Area:");
lblArea.setBounds(244, 119, 75, 68);
panel.add(lblArea);
textField_2 = new JTextField();
textField_2.setBounds(273, 143, 86, 20);
panel.add(textField_2);
textField_2.setColumns(10);
textField_2.setEditable(false);
textField_2.setText(finalArea);
}
}
您的代码确实令人困惑,但我发现了一些问题:
double value=double.parseDouble(textField.getText())代码>
这是在用户有机会查看gui之前运行的<代码>文本字段.GETTrEXE()/Case>将返回一个空字符串,当程序运行时,PARSEBUTION方法总是会抛出一个NUMFALFATATE异常,因为它不认为空字符串是有效的数字格式。p>
double区域=double.parseDouble(值)*double.parseDouble(值_1)代码>
这里,变量value
已经是双精度的,不需要解析,并且变量value\u 1
不存在
当您打算将actionListener分配给textField_1时,您将第二个分配给了textField
总的来说,所有的计算逻辑似乎都在initialize()方法中运行,这意味着它只运行一次。您希望在更新其中一个文本字段时运行数学
您的字段名非常混乱。textField变量名称应给出其功能的一些指示,如区域textField
,基本textField
,高度textField
这里是对代码的一个修改,它似乎按照您的预期功能运行。请注意,添加了一个calculate()
方法,该方法由操作侦听器调用,该侦听器将查找并显示该区域,如果其中一个输入字段不是有效的数字,则显示NaN(不是数字)。除文本字段变量的重命名外,所有GUI代码都按原样保留
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
public class GUI {
private JFrame frame;
private JTextField baseTextField;
private JTextField heightTextField;
private JTextField areaTextField;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GUI window = new GUI();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public GUI() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 694, 499);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);
JPanel panel = new JPanel();
tabbedPane.addTab("New tab", null, panel, null);
panel.setLayout(null);
JLabel lblInputBase = new JLabel("Input Base");
lblInputBase.setBounds(0, 0, 57, 39);
panel.add(lblInputBase);
baseTextField = new JTextField();
baseTextField.setBounds(0, 28, 86, 20);
panel.add(baseTextField);
baseTextField.setColumns(20);
baseTextField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
calculate();
}
});
JLabel lblInputHeight = new JLabel("Input Height");
lblInputHeight.setBounds(0, 212, 68, 20);
panel.add(lblInputHeight);
heightTextField = new JTextField();
heightTextField.setBounds(0, 230, 86, 20);
panel.add(heightTextField);
heightTextField.setColumns(20);
heightTextField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
calculate();
}
});
JLabel lblArea = new JLabel("Area:");
lblArea.setBounds(244, 119, 75, 68);
panel.add(lblArea);
areaTextField = new JTextField();
areaTextField.setBounds(273, 143, 86, 20);
panel.add(areaTextField);
areaTextField.setColumns(20);
areaTextField.setEditable(false);
}
private void calculate() {
try {
double base = Double.parseDouble(baseTextField.getText());
double height = Double.parseDouble(heightTextField.getText());
double area = base * height;
areaTextField.setText(String.format("%.4f", area));
} catch (NumberFormatException e) {
areaTextField.setText("NaN");
}
}
}
请注意,您需要在两个字段中的一个字段中按enter键来更新area字段。这就是触发JTextField的ActionListener所需要的。您的ActionPerformed
实际上没有任何作用。非常感谢您的帮助,我相信我理解我做错了什么,再次感谢您。