我需要有关此代码的帮助。结果将转到新窗口。我想要的是结果在输入值的主窗口内。
下面的代码将有一个弹出屏幕显示结果,而不是在零售价框中显示答案。我知道这可能是一个简单的问题,也可能会解决,希望有人在我仍在学习的同时帮助我解决此代码。
package com.retailcalcu;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Retailcalculator extends JFrame{
private JPanel panel; // to reference a panel
private JLabel wholeSaleMessageLabel; // to reference a label
private JLabel markupMessageLabel; // to reference a label
private JLabel retailPriceLabel; // to reference a label
private JTextField wholeSalePriceField; // to reference the Whole Sale Price Field
private JTextField markUpPercentage; // to reference the Mark Up text field
private JTextField retailPrice; // to reference the Retail Price Field
private JButton calculateButton; // to reference button
private final int WINDOW_WIDTH = 400; // Window Width
private final int WINDOW_HEIGHT = 150; // Window Height
public static void main(String[] args){
new Retailcalculator();
}
public Retailcalculator(){
// set window title
setTitle("Retail Price Calculator");
// set widow size
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
// tell what to do when the window closes
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// build the panel and add it to the frame
buildPanel();
// add the panel to the frame's content pane
add(panel);
// display the window
setVisible(true);
}
private void buildPanel()
{
// create a label for the wholesale price
wholeSaleMessageLabel = new JLabel("Enter Wholesale Price: ");
// create a text field 15 characters wide
wholeSalePriceField = new JTextField(15);
// create a label for the mark up percentage
markupMessageLabel = new JLabel("Enter Mark Up Percentage: ");
// create a text field 15 characters wide
markUpPercentage = new JTextField(15);
// create a button with the capation "Calculate Retail Price"
calculateButton = new JButton("Calculate Retail Price");
// add an action listener to the button
calculateButton.addActionListener(new CalcButtonListener());
// create a label for the retail price
retailPriceLabel = new JLabel("The Retail Price is: $");
// create a text field 15 characters wide for the retail price
retailPrice = new JTextField(15);
// create a JPanel object and let the panel filed reference it
panel = new JPanel();
// add the labels, rext field and button compnenets to the panel
panel.add(wholeSaleMessageLabel);
panel.add(wholeSalePriceField);
panel.add(markupMessageLabel);
panel.add(markUpPercentage);
panel.add(calculateButton);
panel.add(retailPriceLabel);
panel.add(retailPrice);
/** calculateButton is an action listener class for the Calculate Button*/
}
class CalcButtonListener implements ActionListener{
// This method executes when the user clicks on the Calculate Button
public void actionPerformed(ActionEvent e)
{
String wholesaleInput; // to hold user input for wholesale price
String markUpInput; // to hold user input for mark up percentage
double retailPrice; // declare retail price as a double
double wholePrice; // declare wholesale prcie as a double
double markUp; // declare markup percentage as a double
// get the text entered by the user in the text field box
wholesaleInput = wholeSalePriceField.getText();
// convert wholesale text to double
wholePrice = Double.parseDouble(wholesaleInput);
// get the text entered by the user in the percentage text field
markUpInput = markUpPercentage.getText();
// parse out the markup percentage from the percentage text field
markUp = Double.parseDouble(markUpInput);
// do function to calculate retail price( wholesale * markup)
retailPrice = ((wholePrice * markUp) * .01) + wholePrice;
// display the results
JOptionPane.showMessageDialog(null, retailPrice);
}
}
}
最佳答案
内部类retailPrice
中的双变量CalcButtonListener
是外部类中同名的shadowing JTextField
。
因此,您必须使用:
Retailcalculator.this.retailPrice.setText(Double.toString(retailPrice));
通过将外部类中名为
JTextField
的retailPrice
重命名为retailPriceTextField
,可以避免混淆,只需调用:retailPriceTextField.setText(Double.toString(retailPrice));