繁体   English   中英

JavaFX PropertyValueFactory用于HashMap的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM