1. 编辑器,视图交互和模型更新
1.1 概要
在下面我们创建了一个项目,该项目展示视图器和编辑器使用的相互作用。
我们将创建一个视图,显示几个人。一旦用户双击就打开一个编辑器中,用户可以编辑这个人名称,地址。
下面的数据模型的假设,使一个人的姓氏是独一无二的。这种假设在现实世界中真实的过程是不能的。
1.2。创建项目
创建一个新RCP项目"rcp.intro.editor" 使用"RCP application with a view"模板
1.3。创建和准备域模型
创建一个包"rcp.intro.editor.model" ,在这包内创建下面的类.
package rcp.intro.editor.model;
public class Address {
private String street;
private String number;
private String postalCode;
private String city;
private String country;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String toString() {
return street + " " + number + " " + postalCode + " " + city + " "+ country;
}
}
package rcp.intro.editor.model;
public class Person {
private String firstName;
private String lastName;
private Address address;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
@Override
public String toString() {
return firstName + " " + lastName;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result
+ ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
return true;
}
}
package rcp.intro.editor.model;
import java.util.ArrayList;
import java.util.List;
public class MyModel {
private List<Person> persons = new ArrayList<Person>();
public List<Person> getPersons() {
return persons;
}
public MyModel() {
// 这里只是为了测试我们硬编码的人:
Person person = new Person("Lars", "Vogel");
person.setAddress(new Address());
person.getAddress().setCountry("Germany");
persons.add(person);
person = new Person("Jim", "Knopf");
person.setAddress(new Address());
person.getAddress().setCountry("Germany");
persons.add(person);
}
}
请注意,我们重写了equals(和hashCode方法)。这使我们后来确定编辑每个人的权利。
(版权归原作者所有)