我正在尝试在texArea中创建这样的计算,我在一个类中进行计算,然后将其传递到另一个类,只需单击按钮即可执行下一个计算。所以,如果我点击' m10py' ,无论我在TextArea中有什么,都会减少0.10。我尝试了一切,但它似乎并没有起作用。它不会抛出任何错误,但TextArea中的总数保持不变。 我的主要课程,它执行基本计算。
public void actionPerformed(ActionEvent e) {
double frontM = 9.50;
double middleM = 7.30;
double backM = 6.70;
double vipM = 12.90;
//double total1 = Double.parseDouble(output.getText());
if (frontR.isSelected() && e.getSource() == calculate) {
double total = Integer.parseInt(frontT.getText()) * frontM;
output.setText(pounds.format(total));
} else if (middleR.isSelected() && e.getSource() == calculate) {
double total = Integer.parseInt(middleT.getText()) * middleM;
String total2 = String.valueOf(total);
output.setText(total2);
} else if (backR.isSelected() && e.getSource() == calculate) {
double total = Integer.parseInt(backT.getText()) * backM;
output.setText(pounds.format(total));
} else if (vipR.isSelected() && e.getSource() == calculate) {
double total = Integer.parseInt(vipT.getText()) * vipM;
output.setText(pounds.format(total));
} else if (e.getSource() == cancel) {
frontT.setText("1");
middleT.setText("1");
backT.setText("1");
vipT.setText("1");
output.setText("");
}
if (e.getSource() == payment) {
Payment paymentJ = new Payment();
paymentJ.output.setText(output.getText());
}
}
将计算传递给另一个textArea的第二个类。我没有为每个按钮做这个,因为我无法计算..
public void actionPerformed(ActionEvent e) {
Main main = new Main();
// double totalR = Double.parseDouble(output.getText());
String cost = main.output.getText();
double cost2 = Double.parseDouble(cost);
double total;
total = cost2;
double m10py = 0.10;
double m20py = 0.20;
double m50py = 0.50;
double m1p = 1.00;
double m2p = 2.00;
double m5p = 5.00;
double m10po = 10.00;
double m20po = 20.00;
if (e.getSource() == m10p) {
total = total - m10py;
String total2 = String.valueOf(total);
output.setText(total2);
}
}
我对此很新,所以请不要去找我。我只需要知道这有什么问题。感谢
答案 0 :(得分:1)
我做知道的一件事是,你有一个严重的参考问题。例如,在您发布的第一个actionPerformed方法中:
if (e.getSource() == payment) {
Payment paymentJ = new Payment(); // ***** line 1 ****
paymentJ.output.setText(output.getText()); // ***** line 2 ****
}
在上面的第1行,您可以创建一个名为paymentJ的新付款对象,在第2行,您可以通过调用output.setText(...)
来更改其状态。我猜测输出是一些文本组件,你试图更改它显示的文本,但这是问题 - 虽然paymentJ指的是Payment对象,但它不是正在显示的Payment对象,这是一个完全不同的独立对象,并通过尝试更改其显示的文本来更改此处创建的未显示的对象的状态,对实际显示的Payment对象中的输出文本组件没有任何影响。
同样在你的第二个发布的actionPerformed方法中:
Main main = new Main();
// double totalR = Double.parseDouble(output.getText());
String cost = main.output.getText(); // ***** line 1 ****
double cost2 = Double.parseDouble(cost); // ***** line 2 ****
在上面的第1行,您可以创建一个名为“成本”的新主要对象,然后在第2行通过调用output.getText()
来查询其状态。但是,此处创建的Main实例再次与显示的Main对象不同,这意味着您至少有两个(或更多)Main对象,其中只显示其中一个,从本地创建的数据中提取的数据不会反映对显示的数据所做的更改。您可以在提取文本后放置println来测试它,例如:
Main main = new Main();
// double totalR = Double.parseDouble(output.getText());
String cost = main.output.getText();
System.out.println("cost is currently: " + cost); // ***** add this ****
double cost2 = Double.parseDouble(cost);
我敢打赌,您会看到返回的文本组件所保留的默认值,而不是用户输入的值或显示在当前可视化的主GUI中的值。
怎么办?
如需更多帮助,请提出更好的帮助。
根据您的新代码,
Payment paymenetJ = new Payment(this);
public Payment(Main main)
this.main = main;