Я понимаю, что вопрос оказался огромным, но в противном случае он будет понятен не всем.
Я пишу приложение для управления документами для себя, что со мной сейчас происходит - я используюколлекция 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