JavaFX PropertyValueFactory для значений HashMap - PullRequest
0 голосов
/ 02 декабря 2018

Я сейчас занимаюсь разработкой программы, где у вас есть стол.Там столбцы должны быть переменными.Это означает, что в зависимости от того, что вы укажете, будет создано много столбцов.Я реализовал это:

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

Проблема в том, что я не знаю, как вставить значения в столбцы сейчас.Класс "State" (откуда берутся значения) выглядит следующим образом:

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 BTL

1 Ответ

0 голосов
/ 02 декабря 2018

Вот решение:

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