각 맵의 크기 (항목 수)는 런타임 동안 변경되지 않는다고 가정했는데, 고정 된 최대 항목 수가 있습니다. 이 경우 TableView
은 표준 속성 (또는 Property
)과 동일한 방법으로 각 Entry
에 액세스 할 수 있습니다. 다음은 Person
의 수정 된 클래스입니다.
public class PersonSimple {
String firstName;
String lastName;
String age;
Map<Integer, Double> map;
public PersonSimple(String fn, String ln, String age, Double gr0, Double gr1, Double gr2)
{
this.firstName = fn;
this.lastName = ln;
this.age = age;
map = new LinkedHashMap<>();
map.put(0, gr0);
map.put(1, gr1);
map.put(2, gr2);
}
public String getFirstName()
{
return firstName;
}
public String getLastName()
{
return firstName;
}
public String getAge()
{
return age;
}
private Double getFromMap(Integer key)
{
Set<Entry<Integer, Double>> s = map.entrySet();
Iterator<Entry<Integer, Double>> iter = s.iterator();
int index = 0;
while(iter.hasNext())
{
Entry<Integer, Double> e = iter.next();
if(index == key.intValue())
{
return e.getValue();
}
index++;
}
return null;
}
public Double getFM0()
{
return getFromMap(0);
}
public Double getFM1()
{
return getFromMap(1);
}
public Double getFM2()
{
return getFromMap(2);
}
}
당신이 볼 수 있듯이, 모든 PersonSimple
세 가지 항목을 보유해야 Map
있습니다. 이제 트릭이 나옵니다. 이 각 항목에 대해 get-method를 정의했습니다. 이 부분은 TableView
과의 상호 작용에 중요하기 때문에 이름을 어떻게 지어야하는지주의하십시오.
다음 코드는 이러한 새로운 방법을 TableView
에 연결하는 방법을 보여줍니다.
TableColumn firstNameCol = new TableColumn("First Name");
TableColumn lastNameCol = new TableColumn("Last Name");
TableColumn ageCol = new TableColumn("Age");
TableColumn aCol = new TableColumn("Assignment1");
TableColumn bCol = new TableColumn("Assignment2");
TableColumn cCol = new TableColumn("Assignment3");
table.getColumns().addAll(firstNameCol, lastNameCol, ageCol,aCol,bCol,cCol);
firstNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("firstName"));
lastNameCol.setCellValueFactory(new PropertyValueFactory<Person,String>("lastName"));
ageCol.setCellValueFactory(new PropertyValueFactory<Person,String>("age"));
aCol.setCellValueFactory(new PropertyValueFactory<Person,Double>("FM0"));
bCol.setCellValueFactory(new PropertyValueFactory<Person,Double>("FM1"));
cCol.setCellValueFactory(new PropertyValueFactory<Person,Double>("FM2"));
각 PropertyValueFactor
클래스 PersonSimple
에서 Get-방법 중 하나에 맞는 이름을 가져옵니다 가능성이 매우 중요하다. 자세한 내용은 the TableView-API을 참조하십시오.
당연히, 내 접근 방식은 런타임에서 클래스에 새 메소드를 추가하는 것이 Java에서 불가능하다는 것을 알고 있기 때문에 동적 맵에서 데이터를 가져 오는 문제를 해결하지 못합니다. 그러나이 제한을 피하기 위해 반사 API를 사용하는 트릭이있을 수 있습니다.
굉장하고 훌륭한 솔루션! –