我知道这个问题原来很大,但否则每个人都不清楚。
我正在为自己编写一个文档管理器应用程序,现在在那里发生了什么-我使用ObservableList集合(位于Main类中),该集合对MainData类中的变量进行操作(事实证明,每个实例此类是表格中的新行)。我通过控制器类显示所有信息,即,我有第一个表,其中显示了所有文档(作品),根据所选文档,我在相应的标签(作品)中显示了必要的信息,但是我还有第二个表(它不能正常工作),根据我的逻辑,根据所选文档,我在其中显示与所选文档相关的文件名(即,如果突出显示一个文档,则第二个表可以显示3个文件,如果选择另一个文档,则可以显示5个文件。为了检查功能,我向SimpleListProperty集合中添加了几行(分别位于MainData中)以将其显示在表中,但是至少我在设计器中添加的数据显示在表中,它们全部合而为一行,并且第二张表除了创建与第一张表相同的行数外(在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