我使用的是java fx,在下面的代码中没有什么花哨的东西,并捕获文本字段的focusedProperty来覆盖下面新输入的值。下面的代码更改了在文本字段中输入的人名,当用户单击cancel按钮时,它会将旧姓名放回到文本字段中。但是,由于某些原因,神奇的事情发生了,每当我设置人名时,它都会覆盖cancelPerson变量中的字段。不知道为什么会发生这种情况?在设置新值之前,我从persons中获取cancelPerson。那么,人员列表中的更改是如何影响自变量的。你知道为什么会发生这种情况吗?谢谢。
private ObservableList<Person> persons;
private Person person;
private Person cancelPerson;
personName.focusedProperty().addListener((observable, oldValue, newValue) -> {
if (!newValue) {
final int index = personIdCombo.getSelectionModel().getSelectedIndex();
cancelPerson = persons.get(index);
final Person person = persons.get(index);
person.setName(personName.getText());
persons.set(index, person);
}
}
);
class Person{
private final StringProperty name;
public Person() {
this.name = new SimpleStringProperty("testName");
}
public SystemParams(Person person) {
this.name = person.name;
}
}
发布于 2018-08-13 02:14:57
在Java语言中,类实例就像Person
的实例一样是引用类型。这意味着当您执行赋值时,您只是复制对实例的引用。
在您的代码中,person
和cancelPerson
都引用同一个Person实例,您对它们执行的任何操作都会影响该实例。
如果您不想修改Person
实例,可以先复制该实例。
https://stackoverflow.com/questions/51811522
复制相似问题