从 getter 和 setter 中获取值
Retrieving Values from Getters and Setters
我在从 getters 和 setters 中检索值时遇到问题。我在一个 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);
}
}
我在从 getters 和 setters 中检索值时遇到问题。我在一个 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);
}
}