JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap

Battleju

Aktives Mitglied
Hi,
ich bin gerade dabei ein Programm zu entwickeln, bei der man eine Tabelle hat. Dort sollen die Spalten variabel sein. Dh. je nach dem was man angibt sollen bestimmt viele Spalten entstehen. Das habe ich so umgesetzt:
Java:
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);
        }
    }

Das Problem ist, dass ich nicht weiß wie ich jetzt Werte in die Spalten einfüge.
Die Klasse "State"(da wo die Werte herkommen) sieht so aus:
Java:
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);
    }
}

Ich will jetzt dass Werte aus der HashMap in die Spalte übernommen werde. Nur weiß ich nicht so richtig wie ich das machen soll :/. Könnte mir da bitte jemand weiterhelfen?
Danke im Voraus!
lg bttl
 
Zuletzt bearbeitet von einem Moderator:
Ich habe keine Ahnung wie ich das geschafft habe aber das ist die Lösung:
Java:
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);
        }
tut mir leid für die Störung
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben