【问题标题】:JavaFX PropertyValueFactory for values of a HashMapJavaFX PropertyValueFactory 用于 HashMap 的值
【发布时间】:2018-12-02 14:40:40
【问题描述】:

我目前正在开发一个程序,其中您有一张桌子。在那里,列应该是可变的。这意味着根据您指定的内容,将创建许多列。我已经实现了这个:

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

【问题讨论】:

    标签: java javafx tableview


    【解决方案1】:

    这就是解决方案:

    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);
        }
    

    【讨论】:

    • 我正在寻找这个,感谢您发布您的解决方案
    猜你喜欢
    • 2014-08-29
    • 2018-04-21
    • 2013-06-06
    • 1970-01-01
    • 2022-01-17
    • 2013-09-08
    • 2013-05-14
    相关资源
    最近更新 更多