TableView在每次更新时都将焦点转移

时间:2019-05-15 01:19:28

标签: java javafx

我正在用Java / JavaFX编写一个应用程序,其中用户输入输入(然后确认输入),然后将输入添加到ObservableList中,该ObservableList然后更新字段表(即显示所有内容的列表)我到目前为止对JavaFX还是很陌生(并从大学课程中学到了关于JavaFX的知识,所以信息甚至可能不准确-老师也没有教我们如何操作FXML ,仅介绍如何从Java应用程序的末尾操作JavaFX),但是我已经对其进行了设置,因此有一个包含TableView的ScrollPane(以便用户可以在表格过大时对其进行滚动),并且只要数据确认输入后,它会更新可观察列表,这又会实时更新TableView。不幸的是,每次TableView更新时,它都会从需要用户输入的TextField中窃取焦点。数据已确认,但似乎不起作用。什么是最好的制作方法这样,当输入数据时,表会更新,但是焦点不会离开TextField吗?我试着使表格无法聚焦,但随后将其中包含表格的窗口聚焦。 我将在这里应该相关的代码部分放到这里(希望我将所需的所有内容放到这里,否则我将进行编辑以更新)。

表格:

TableView rootThree = new TableView(fieldList);     
        TableColumn<String, String> fieldCol = new TableColumn<String, String>("Fields");
        rootThree.setPlaceholder((new Label("No Fields Entered")));
        fieldCol.setCellValueFactory(data -> new SimpleStringProperty(data.getValue()));
        rootThree.setEditable(false);
        rootThree.getColumns().add(fieldCol);
        rootThree.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
        rootThree.setFocusTraversable(false);

    ScrollPane fieldDisplayScroll = new ScrollPane();
        fieldDisplayScroll.setContent(rootThree);
        fieldDisplayScroll.setFitToHeight(true);
        fieldDisplayScroll.setFitToWidth(true);
        fieldDisplayScroll.setPannable(false);
        fieldDisplayScroll.setVbarPolicy(ScrollBarPolicy.ALWAYS);
        fieldDisplayScroll.setHbarPolicy(ScrollBarPolicy.AS_NEEDED);
        rootOne.getChildren().add(fieldDisplayScroll);
    Scene fieldDisplayScene = new Scene(fieldDisplayScroll, 300, 400);
    Stage fieldDisplay = new Stage();
    rootThree.setMinWidth(fieldDisplay.getWidth());
    fieldCol.setPrefWidth(rootThree.getWidth());
    fieldDisplay.setScene(fieldDisplayScene);   

输入确认按钮:

inputOkayBtn.setOnAction(ActionEvent ->{
                if (!entryConfirm.getEditor().getText().isEmpty()) {
                    fieldList.add(entryConfirm.getEditor().getText());
                    fieldEntryTextInput.clear();
                    entryText.setText("Please Enter Field #" + (fieldList.size() + 1));
                    fieldEntryTextInput.requestFocus();
                } else {
                    //error box for no input
                    noInputAlert.showAndWait();
                }
            });

            inputNotOkayBtn.setOnAction(ActionEvent ->{

            });

与输入确认按钮绑定的对话框的代码,以防万一:

TextInputDialog entryConfirm = new TextInputDialog();
    entryConfirm.hide();
        //button names for entry confirmation
        Button inputOkayBtn = (Button) entryConfirm.getDialogPane().lookupButton(ButtonType.OK);
        Button inputNotOkayBtn = (Button) entryConfirm.getDialogPane().lookupButton(ButtonType.CANCEL);

TableView正在从ObservableList更新。基本上,用户输入内容,点击接受->弹出确认对话框,用户要么点击确定,要么编辑输入然后点击确定->对话框中的输入(即编辑的输入)被添加到列表中-> tableview更新新条目

事件链正在按我希望的方式工作,但我希望更新表视图而不会从用户键入的TextField中获取焦点。当应用程序启动时,我还将打开ScrollPane / TableView,它还将焦点从主窗口拉到TableView上。 我需要做些什么才能使TableView更新而不会引起关注?是否需要完全不同地设置?再次,我对JavaFX还是相当陌生,所以我可能在某个地方存在根本的误解。

0 个答案:

没有答案