使用tableView,如何构建应用程序以正确显示信息

时间:2019-06-06 07:30:02

标签: java javafx

我知道这个问题原来很大,但否则每个人都不清楚。

我正在为自己编写一个文档管理器应用程序,现在在那里发生了什么-我使用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

0 个答案:

没有答案