работа с tableView, как построить приложение для корректного отображения информации - PullRequest
0 голосов
/ 06 июня 2019

Я понимаю, что вопрос оказался огромным, но в противном случае он будет понятен не всем.

Я пишу приложение для управления документами для себя, что со мной сейчас происходит - я используюколлекция ObservableList (находится в основном классе Main), которая работает с переменными из класса MainData (оказывается, что каждый экземпляр этого класса является новой строкой в ​​таблице).Я отображаю всю информацию через класс контроллера, то есть у меня есть первая таблица, где я отображаю все свои документы (работы), в зависимости от выбранного документа, я отображаю необходимую информацию в соответствующих ярлыках (работах), но ятакже есть вторая таблица (она не работает правильно), где, согласно моей логике, в зависимости от выбранного документа я отображаю имена файлов, которые относятся к выбранному документу (т. е. если один документ выделен, вторая таблица можетотобразить 3 файла, и если вы выберете другой документ, можно отобразить 5 файлов).Чтобы проверить функциональность, я добавляю пару строк в коллекцию SimpleListProperty (которая расположена соответственно в MainData), чтобы отобразить их в таблице, но, по крайней мере, мои добавленные данные в конструкторе отображаются в таблице, все они идут в однойline, и помимо второй таблицы создается то же количество строк, что и в первой (в qwerty, asdfgh, так как у меня три документа создано три идентичных строки), как избавиться от этой зависимости?Те.Я хочу привести свое приложение к логике, описанной выше.

Класс всех переменных

public class MainData {
    private final StringProperty numberContract;
    private final ListProperty<String> nameFiles; //here I put the names of the files that relate to the document
    // further variables for Label


    public MainData(String numberContract) {
        this.numberContract = new SimpleStringProperty(numberContract);
        this.nameFiles  = new SimpleListProperty<>(FXCollections.observableArrayList());
        this.nameFiles.add("qwerty");
        this.nameFiles.add("asdfgh"); //i want to add only two rows to the second table
    }
//Further, all getters and setters

Класс-контроллер

public class MainController {
    @FXML
    private TableView<MainData> contractTable;
    @FXML
    private TableColumn<MainData, String> numberContractColumn;
    @FXML
    private TableView<MainData> filesTable;
    @FXML
    private TableColumn<MainData, ObservableList<String>> nameFilesColumn;
//далее снова все для Label

// Link to main application.
    private Main main;

 public void setMain(Main main) {
        this.main = main;

        // Adding to the table data from the observed list
        contractTable.setItems(main.getContractData());
        filesTable.setItems(main.getContractData());
    }

@FXML
    private void initialize() {
        // Initialize the table.
        numberContractColumn.setCellValueFactory(cellData -> cellData.getValue().numberContractProperty());
        nameFilesColumn.setCellValueFactory(cellData -> cellData.getValue().getNameFiles());

         // Listen to the selection changes, and when changing, display
         // additional information about the addressee.
        contractTable.getSelectionModel().selectedItemProperty().addListener(
                (observable, oldValue, newValue) -> showContractDetails(newValue));

Основной класс

public class Main extends Application {

    private Stage menuBar;
    private BorderPane mainWindow;

    /**
     * Data, in the form of an observable list of documents.
     */
    private ObservableList<MainData> contractData = FXCollections.observableArrayList();

    /**
     * Returns data in the form of an observable list of documents.
     * @return
     */
    public ObservableList<MainData> getContractData() {
        return contractData;
    }
//further FXML display
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...