从 getter 和 setter 中获取值

Retrieving Values from Getters and Setters

我在从 getterssetters 中检索值时遇到问题。我在一个 class 中设置值,然后尝试在另一个中检索它,以便它可以在 标签 中使用。我有一段时间没有在 Java 中进行任何编程,所以我觉得有一些我不知道的基本知识。

我编写了这段简短的代码来显示我在主项目中遇到的问题。任何帮助将不胜感激,希望你今天过得愉快。

表格 1 Class:

public class Form1 extends JFrame implements ActionListener {

    JButton btn1;
    JTextField tf1;
    
    public Form1() {
        
        btn1 = new JButton("submit");
        btn1.setBounds(75, 90, 100, 40);
        btn1.setFocusable(false);
        btn1.addActionListener(this);
        
        tf1 = new JTextField();
        tf1.setBounds(20, 30, 200, 40);
        btn1.addActionListener(this);
        
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(250, 180);
        this.setLayout(null);
        this.setResizable(false);
        this.setVisible(true);
        this.add(btn1);
        this.add(tf1);
    }
    public void actionPerformed(ActionEvent e) {
        
        String b = "";
        String v = "";
        String m = "";
        String r = "";
        
        Cars car = new Cars(b, v, m, r);
        
        if(e.getSource()==btn1) {
            
            b = tf1.getText();
            car.SetBmw(b);
            
            new Form2();
            System.out.println(car.GetBmw());
            // Side note, for some reason this will be printed twice in the console.
        }
    }
}

Form2 Class:

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Form2 extends JFrame {

    Cars car = new Cars();
    
    public Form2() {
    
        JLabel label = new JLabel();
        label.setText(car.GetBmw());
        label.setBounds(10, 10, 50, 50);
        
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(250, 180);
        this.setLayout(null);
        this.setResizable(true);
        this.setVisible(true);
        this.add(label);
    }
}

汽车Class:


public class Cars {

    private String bmw;
    private String vw;
    private String mazda;
    private String renault;
    
        public Cars() {}
        public Cars(String bmw, String vw, String mazda, String renault) {
            
            this.bmw = bmw;
            this.vw = vw;
            this.mazda = mazda;
            this.renault = renault;
        }
        
        // Getters and Setters for BMW
        public String GetBmw() {
            return bmw;
        }
        public void SetBmw(String bmw) {
            this.bmw = bmw;
        }
        
        // Getters and Setters for VW
        public String GetVw() {
            return vw;
        }
        public void SetVw(String vw) {
            this.vw = vw;
        }
        
        // Getters and Setters for Mazda
        public String GetMazda() {
            return mazda;
        }
        public void SetMazda(String mazda) {
            this.mazda = mazda;
        }
        
        // Getters and Setters for Renault
        public String GetRenault() {
            return renault;
        }
        public void SetRenault(String renault) {
            this.renault = renault;
        }
}

Form2 中,您正在创建一个新的 Cars 实例:

    Cars car = new Cars();

这是一个与 Form1.actionPerformed 中创建的实例完全不同的实例,因此它将具有完全不相关的值。由于您在这里使用的是无参数构造函数,因此所有字段都将使用默认值 null.

很难说出你的意图是什么,因为这是一个毫无意义的玩具示例,但我最好的猜测是你想将创建的 Cars 实例传递给 Form2 的构造函数。

Form1.actionPerformed()中,将创建的实例(称为car)传递给构造函数:

            new Form2(car);

Form2中,接收值并赋值给字段:

import javax.swing.JFrame;
import javax.swing.JLabel;

public class Form2 extends JFrame {

    Cars car;
    
    public Form2(Cars car) {
        this.car = car;
    
        ...
    }
}

您正在 Form2 中创建一个新的 Car 实例,它是空的,并且您正在这个空实例上使用 getter。 要从 Form1 检索实例数据,您必须将其传递给 Form2,例如通过构造函数:

    public void actionPerformed(ActionEvent e) {
        
        String b = "";
        String v = "";
        String m = "";
        String r = "";
        
        Cars car = new Cars(b, v, m, r);
        
        if(e.getSource()==btn1) {
            
            b = tf1.getText();
            car.SetBmw(b);
            
            new Form2(car);
            System.out.println(car.GetBmw());
            // Side note, for some reason this will be printed twice in the console.
        }
    }

public class Form2 extends JFrame {

    
    public Form2(Car car) {
    
        JLabel label = new JLabel();
        label.setText(car.GetBmw());
        label.setBounds(10, 10, 50, 50);
        
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(250, 180);
        this.setLayout(null);
        this.setResizable(true);
        this.setVisible(true);
        this.add(label);
    }
}