Как сделать просмотр таблицы из вложенного списка в javafx? - PullRequest
0 голосов
/ 11 октября 2019

Я получил данные от JSON, используя Gson. Затем я пытаюсь поместить эти данные в TableView, но мне удалось это сделать, как я увижу ниже.

public class Data {

    @SerializedName("id")
    @Expose
    private String id;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("publicname")
    @Expose
    private String publicname;
    @SerializedName("sendername")
    @Expose
    private String sendername;
    @SerializedName("senderemail")
    @Expose
    private String senderemail;
    @SerializedName("replyto")
    @Expose
    private String replyto;

    // getters and setters...

    @Override
    public String toString() {
        return "Data [id = " + id + ", name = " + name + ", publicname = " + 
            publicname + ", sendername = " + sendername + ", senderemail = " + 
            senderemail + ", replyto = " + replyto + "]";
    }
}

public class meta {

    @SerializedName("displayed_count")
    @Expose (deserialize = false)
    private Integer displayedCount;
    @SerializedName("total_count")
    @Expose (deserialize = false)
    private Integer totalCount;
    @SerializedName("limit")
    @Expose (deserialize = false)
    private Integer limit;
    @SerializedName("offset")
    @Expose (deserialize = false)
    private Integer offset;

    // getters and setters..

    @Override
    public String toString() {
        return "meta [displayed_count=" + displayedCount + ", total_count=" + 
            totalCount + ", limit=" + limit + ", offset=" + offset + "]";
    }
}

public class Contactlists {

    @SerializedName("status")
    @Expose (deserialize = false)
    private String status;
    @SerializedName("meta")
    @Expose (deserialize = false)
    private meta meta;
    @SerializedName("data")
    @Expose
    public List<Data> data = null;

    getters and setters

    @Override
    public String toString() {
        return "" + data + "";
    }
}

Teď Controller:

@FXML
private TableView<Contactlists> mytable;
@FXML
private TableColumn<Contactlists, String> stID;
@FXML
private TableColumn<Contactlists, String> stName;
@FXML
private TableColumn<Contactlists, String> stPublicname;
@FXML
private TableColumn<Contactlists, String> stSendername;
@FXML
private TableColumn<Contactlists, String> stSenderemail;
@FXML
private TableColumn<Contactlists, String> stReplyto;

private final ObservableList<Contactlists> observableList = 
    FXCollections.observableArrayList();

@FXML
private void actionk(ActionEvent event) throws Exception {
    ContactListsGet();
    String myjson = LoginTest.apiOutput;

    Gson gson = new 
        GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
    Contactlists Contactlists = 
        gson.fromJson(myjson,Contactlists.class);

    observableList.addAll(Contactlists);

    stID.setCellValueFactory(cellDataFeatures -> new 
            SimpleStringProperty(cellDataFeatures.getValue().data.stream()
            .map(Data::getId)
            .collect(Collectors.joining("\n"))));
    stName.setCellValueFactory(cellDataFeatures -> new 
            SimpleStringProperty(cellDataFeatures.getValue().data.stream()
            .map(Data::getName)
            .collect(Collectors.joining("\n"))));
    stPublicname.setCellValueFactory(cellDataFeatures -> new 
            SimpleStringProperty(cellDataFeatures.getValue().data.stream()
            .map(Data::getPublicname)
            .collect(Collectors.joining("\n"))));
    stSendername.setCellValueFactory(cellDataFeatures -> new 
            SimpleStringProperty(cellDataFeatures.getValue().data.stream()
            .map(Data::getSendername)
            .collect(Collectors.joining("\n"))));
    stSenderemail.setCellValueFactory(cellDataFeatures -> new 
            SimpleStringProperty(cellDataFeatures.getValue().data.stream()
            .map(Data::getSenderemail)
            .collect(Collectors.joining("\n"))));
    stReplyto.setCellValueFactory(cellDataFeatures -> new 
            SimpleStringProperty(cellDataFeatures.getValue().data.stream()
            .map(Data::getReplyto)
            .collect(Collectors.joining("\n"))));

    mytable.setItems(observableList);
}

и вот результат:

Однако, когда я использую это, данные вставляются только в одну строку ниже друг друга, что мне не удобно, потому что за отдельными списками контактов следуют другие действия,Как поместить данные в таблицу, где один список контактов будет в одной строке?

...