Java 将变量从JFrame传递到另一个JFrame

Java 将变量从JFrame传递到另一个JFrame,java,swing,windowbuilder,Java,Swing,Windowbuilder,我想在按下btnCalculeaza按钮时,将一个变量从一个JFrame传递到另一个JFrame 这是我的密码: JButton btnCalculeaza = new JButton("Calculeaza"); btnCalculeaza.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) {

我想在按下
btnCalculeaza
按钮时,将一个变量从一个JFrame传递到另一个JFrame

这是我的密码:

JButton btnCalculeaza = new JButton("Calculeaza");
        btnCalculeaza.addActionListener(new ActionListener() {
            @Override

            public void actionPerformed(ActionEvent e) {
                 int algad = Integer.parseInt(textField.getText());
                 int analiza = Integer.parseInt(textField_1.getText());
                 int be = Integer.parseInt(textField_2.getText());
                 int depcom = Integer.parseInt(textField_3.getText());
                 int engleza1 = Integer.parseInt(textField_4.getText());
                 int engleza2= Integer.parseInt(textField_5.getText());
                 int fizica= Integer.parseInt(textField_6.getText());
                 int grafica= Integer.parseInt(textField_7.getText());
                 int informatica= Integer.parseInt(textField_8.getText());
                 int matematici= Integer.parseInt(textField_9.getText());
                 int programare1= Integer.parseInt(textField_10.getText());
                 int programare2= Integer.parseInt(textField_11.getText());
                 int tpsm= Integer.parseInt(textField_12.getText());
                double nota1;

            nota1=(7*algad+analiza*6.0+7*be+3*depcom+2*engleza1+2*engleza2+fizica*7+grafica*3+informatica*4+matematici*6+programare1*5+programare2*4+tpsm*4)/60;
                System.out.println(nota1);
                new Anul2(nota1).setVisible(true);
                Anul2 anul2 =new Anul2();
                anul2.setVisible(true);
                frame.dispose();
            }
        });
第二个
JFrame

public class Anul2 extends JFrame {

    private double nota1;
    public Anul2(double nota1) {
        this.nota1 = nota1;
    }

    private static final long serialVersionUID = 1L;
    private JPanel contentPane;

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

    /**
     * Create the frame.
     */
    public Anul2() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 527, 407);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        JLabel lblMediaGeneralaPana = new JLabel("Media generala pana acum:");
        lblMediaGeneralaPana.setBounds(12, 331, 160, 16);
        contentPane.add(lblMediaGeneralaPana);

        JLabel lblNewLabel = new JLabel("");
        lblNewLabel.setText(Double.toString(nota1));
        lblNewLabel.setBounds(171, 331, 56, 16);
        contentPane.add(lblNewLabel);
    }
}
我想将
nota1
变量传递给第二个
JFrame
(称为
Anul2
),然后我想通过两种方式将其转换为
JLabel

  • 将第一个JFrame的引用传递给第二个JFrame构造函数
  • 使用getFrames()方法和getDeclaredFields()获取nota1变量值
  • 两方面,

  • 将第一个JFrame的引用传递给第二个JFrame构造函数
  • 使用getFrames()方法和getDeclaredFields()获取nota1变量值

  • 您真正的问题是您在代码中混淆了责任

    您应该将数据处理与UI内容完全分离

    意思是:你有一个局部变量

    nota1=(7*algad+analiza*6.0+7*be+3*depcom+2*engleza1+2*engleza2+fizica*7+grafica*3+informatica*4+matematici*6+programare1*5+programare2*4+tpsm*4)/60;
    
    在一个动作监听器中进行极其复杂的计算。这些东西不属于那里

    相反,您应该有一个独特的类,它只保存该计算所需的所有参数。然后,该类可能有一个方法
    computeNota()

    现在:在动作侦听器中,创建该类的对象,然后可以将该对象传递给新的JFRame


    将数据处理与向用户显示数据分离

    您真正的问题是您在代码中混淆了责任

    您应该将数据处理与UI内容完全分离

    意思是:你有一个局部变量

    nota1=(7*algad+analiza*6.0+7*be+3*depcom+2*engleza1+2*engleza2+fizica*7+grafica*3+informatica*4+matematici*6+programare1*5+programare2*4+tpsm*4)/60;
    
    在一个动作监听器中进行极其复杂的计算。这些东西不属于那里

    相反,您应该有一个独特的类,它只保存该计算所需的所有参数。然后,该类可能有一个方法
    computeNota()

    现在:在动作侦听器中,创建该类的对象,然后可以将该对象传递给新的JFRame


    将数据处理与向用户显示数据分离

    this()
    添加到您的
    公共Anul2(双nota1){
    constructor,通过这种方式,它将构建UI作为其工作的一部分1)请参见2)更快地获得更好的帮助,添加or。3)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。在不同的地区使用不同的PLAF。因此,它们不利于像素完美的布局。相反,使用布局管理器,或者使用其他工具使用布局填充和边框。除此之外,命名:命名变量t_1、t_2……等等没有意义。要么使用数组(这样你就可以循环这些东西),要么使用有意义的名称,比如
    tf_algad
    …等等。但从心理上来说,映射“tf1”是“algad”…这不是一种可伸缩的模式。添加
    this()
    发送给您的
    公共Anul2(双标记1){
    constructor,通过这种方式,它将构建UI作为其工作的一部分1)请参见2)更快地获得更好的帮助,添加or。3)Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。在不同的地区使用不同的PLAF。因此,它们不利于像素完美的布局。相反,使用布局管理器,或者使用其他工具使用布局填充和边框。除此之外,命名:命名变量t_1、t_2……等等没有意义。要么使用数组(这样你就可以循环这些东西),要么使用有意义的名称,比如
    tf_algad
    …等等。但从心理上来说,映射“tf1”就是“algad”…这不是一个可伸缩的模式。你是说
    getDeclaredFields()
    与反射一起?如果是,那就是非常糟糕的建议。你是说
    getDeclaredFields()
    与反射一起?如果是,那就是非常糟糕的建议。