Java 如何将变量从一个jframe传递到另一个jframe

Java 如何将变量从一个jframe传递到另一个jframe,java,swing,Java,Swing,目前,我的java应用程序在jframe之间传递值时遇到了一些问题。我的程序是让用户在文本框中输入他们的旅行距离(以公里为单位)。捐款将通过用户根据距离公里输入的任何内容获得。1公里=0.10美元,那么5公里=0.50美元,我该如何实现这一点??一旦用户在runorwalk2帧上输入5km并单击“确定”,runorwalk3帧将显示金额为$0.50。我如何实现这一点呢??以下是我当前的2帧代码: public class RunOrWalk2 extends JFrame { private

目前,我的java应用程序在jframe之间传递值时遇到了一些问题。我的程序是让用户在文本框中输入他们的旅行距离(以公里为单位)。捐款将通过用户根据距离公里输入的任何内容获得。1公里=0.10美元,那么5公里=0.50美元,我该如何实现这一点??一旦用户在runorwalk2帧上输入5km并单击“确定”,runorwalk3帧将显示金额为$0.50。我如何实现这一点呢??以下是我当前的2帧代码:

public class RunOrWalk2 extends JFrame {

private JPanel contentPane;
private JTextField textField1;
private JTextField textField;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                RunOrWalk2 frame = new RunOrWalk2();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public RunOrWalk2() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblNewLabel = new JLabel("Run/Walk");
    lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 18));
    lblNewLabel.setBounds(172, 11, 81, 14);
    contentPane.add(lblNewLabel);

    JLabel lblNewLabel_1 = new JLabel("Distance Travelled");
    lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblNewLabel_1.setBounds(154, 36, 117, 14);
    contentPane.add(lblNewLabel_1);

    textField1 = new JTextField();
    textField1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
        }
    });
    textField1.setBounds(154, 61, 115, 40);
    contentPane.add(textField1);
    textField1.setColumns(10);

    JLabel lblNewLabel_2 = new JLabel("Km");
    lblNewLabel_2.setFont(new Font("Tahoma", Font.PLAIN, 13));
    lblNewLabel_2.setBounds(279, 74, 46, 14);
    contentPane.add(lblNewLabel_2);

    JLabel lblMaxDonationLimit = new JLabel("Max donation limit for the week");
    lblMaxDonationLimit.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblMaxDonationLimit.setBounds(130, 123, 195, 17);
    contentPane.add(lblMaxDonationLimit);

    textField = new JTextField();
    textField.setFont(new Font("Tahoma", Font.PLAIN, 16));
    textField.setText("        $10");
    textField.setBounds(154, 150, 117, 48);
    contentPane.add(textField);
    textField.setColumns(10);

    JButton btnNewButton = new JButton("Back");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            RunOrWalk frame = new RunOrWalk();
            frame.setVisible(true);
            dispose();
        }
    });
    btnNewButton.setBounds(73, 215, 89, 35);
    contentPane.add(btnNewButton);

    JButton btnOk = new JButton("OK");
    btnOk.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            RunOrWalk3 frame = new RunOrWalk3();
            frame.setVisible(true);
            dispose();
        }
    });
    btnOk.setBounds(273, 215, 89, 35);
    contentPane.add(btnOk);
}

}



public class RunOrWalk3 extends JFrame {

private JPanel contentPane;
private JTextField textField4;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                RunOrWalk3 frame = new RunOrWalk3();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public RunOrWalk3() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblNewLabel = new JLabel("Run/Walk");
    lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 18));
    lblNewLabel.setBounds(173, 11, 76, 14);
    contentPane.add(lblNewLabel);

    JLabel lblNewLabel_1 = new JLabel("Total amount donation earned today");
    lblNewLabel_1.setFont(new Font("Tahoma", Font.PLAIN, 14));
    lblNewLabel_1.setBounds(91, 36, 241, 14);
    contentPane.add(lblNewLabel_1);

    textField4 = new JTextField();
    textField4.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
        }
    });
    textField4.setBounds(117, 59, 184, 92);
    contentPane.add(textField4);
    textField4.setColumns(10);

    JButton btnNewButton = new JButton("OK");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            MainMenu window = new MainMenu();
            window.frame.setVisible(true);
            dispose();
        }
    });
    btnNewButton.setBounds(160, 191, 89, 37);
    contentPane.add(btnNewButton);
}



}
向RunOrWalk3添加方法setTextString,该方法更改文本字段中显示的内容,并向RunOrWalk2中调用此方法的btnOK ActionListener添加内容

例如:

public void actionPerformed(ActionEvent arg0) {
  RunOrWalk frame = new RunOrWalk();
  double km = Double.parseDouble(textField1.getText().replace("km",""));
  //read what is in textField1, remove the "km" and transform into a double.
  km = km * 0.1;
  frame.setText(km + " $");
  frame.setVisible(true);
  dispose();
}
顺便说一句:给你的文本字段起更好的名字。
正如XtremeBaumer所说,您只需要一个mainString[]方法

如果你从另一个类开始,你的类中就不需要一个main方法。你的第一个问题是,你所做的一切就是用用户提供的作为输入的东西来显示它,而不是把它放在一个变量中,这个变量既可以用于显示,也可以用于方法,还有XtremeBaumer所说的。然后想一想你想要两个值,一个是距离,另一个是每距离的值。你想用它们做什么,这应该在RunOrWalk3Oh中的方法中,好的,但是我应该如何实现RunOrWalk3的方法setxtstring??我是编程新手,所以这是我的第一个项目,我尝试构建public void setTextString str{\n textField.setTextstr;\n}在runorwalk3中实现这一点。如果没有,请用outputTextfield的名称替换textField。非常感谢!,程序能够正确地显示它