我認爲每個Map的大小(條目數)在運行時不會改變,或者更好:存在固定的最大值條目。如果是這種情況,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方法。小心如何命名它們,因爲這部分對與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
一開始的方法之一的名稱。有關詳細信息,請參見the TableView-API。
當然,我的方法並沒有解決從動態映射中獲取數據的問題,因爲據我所知,在運行時在Java中添加新方法是不可能的。但是使用reflection-api來繞過這個限制可能會有一些技巧。
真棒,偉大的解決方案! –