我正在用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还是相当陌生,所以我可能在某个地方存在根本的误解。