[英]JavaFX PropertyValueFactory for values of a HashMap
我目前正在开发一个有表的程序。 在那里,列应该是可变的。 这意味着将根据您指定的内容创建许多列。 我已经实现了这一点:
public void setAlph(String alphString){
ArrayList<Character> alphNew = new ArrayList<Character>();
for (char c : alphString.toCharArray()) {
alphNew.add(c);
}
alph = alphNew;
alph.add('#');
for(int i = 0; i < states.size(); i++){
for(int j = 0; j < alph.size(); j++){
states.get(i).addChar(alph.get(j));
}
}
mainWindowController.getTableRules().getColumns().clear();
TableColumn statesCol = new TableColumn("state");
statesCol.setCellValueFactory(new PropertyValueFactory<State, String>("name"));
mainWindowController.getTableRules().getColumns().addAll(statesCol);
for(int i = 0; i < getAlph().size(); i++){
TableColumn tc = new TableColumn("" + getAlph().get(i));
tc.setCellValueFactory(new MapValueFactory<String>("" + getAlph().get(i)));
mainWindowController.getTableRules().getColumns().addAll(tc);
}
}
问题是我现在不知道如何将值插入列中。 类“状态”(值的来源)如下所示:
public class State {
private final SimpleStringProperty name;
private Map<Character, String> map;
public State(String name) {
this.name = new SimpleStringProperty(name);
map = new HashMap<Character, String>();
}
public String getName() {
return name.get();
}
public SimpleStringProperty nameProperty() {
return name;
}
public void setName(String name) {
this.name.set(name);
}
public String toString(){
return name.get();
}
public void addChar(char c){
map.put(c, "null");
}
public String getValue(char key){
return map.get(key);
}
}
现在,我希望将HashMap中的值放入该列中。 只有我真的不知道该怎么做:/。 有人可以帮我吗? 先感谢您! lg bttl
那就是解决方案:
for(int i = 0; i < getAlph().size(); i++){
final int j = i;
TableColumn tc = new TableColumn("" + getAlph().get(i));
tc.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<State,String>,ObservableValue<String>>(){
public ObservableValue<String> call(TableColumn.CellDataFeatures<State, String> param) {
return new SimpleStringProperty(param.getValue().mapPropertyProperty().get(getAlph().get(j)));
}
});
mainWindowController.getTableRules().getColumns().addAll(tc);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.