每當在TextField上按下Enter鍵時,如何獲得對話框上的確定按鈕。我已經嘗試了下面的代碼。但是在給出代碼時,無論何時在「city_D」(TextField)上按Enter鍵,OK按鈕都必須被聚焦。如何在Javafx中請求關注對話框確定按鈕?
package dialogdemo;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
*
* @author vikassingh
*/
public class DialogDemo extends Application {
String street_1 = "";
String street_2 = "";
String city = "";
@Override
public void start(Stage primaryStage) {
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
TextField street_1_D = new TextField();
TextField street_2_D = new TextField();
TextField city_D = new TextField();
Dialog<List<String>> dialog = new Dialog<>();
dialog.setTitle("Address");
dialog.setHeaderText(null);
dialog.setGraphic(null);
// Set the button types.
ButtonType okButtonType = new ButtonType("Ok", ButtonBar.ButtonData.OK_DONE);
dialog.getDialogPane().getButtonTypes().addAll(okButtonType, ButtonType.CANCEL);
dialog.getDialogPane().setStyle("-fx-background-color: #fff;");
VBox box = new VBox();
VBox.setVgrow(box, Priority.ALWAYS);
box.getChildren().addAll(street_1_D, street_2_D, city_D);
dialog.getDialogPane().setContent(box);
// Request focus on the username field by default.
Platform.runLater(() -> street_1_D.requestFocus());
// Dialog All Listner
street_1_D.setOnKeyPressed(new EventHandler<KeyEvent>() {
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.ENTER || event.getCode() == KeyCode.TAB || event.getCode() == KeyCode.DOWN) {
street_2_D.requestFocus();
event.consume();
}
}
});
street_2_D.setOnKeyPressed(new EventHandler<KeyEvent>() {
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.ENTER || event.getCode() == KeyCode.TAB || event.getCode() == KeyCode.DOWN) {
city_D.requestFocus();
event.consume();
}
if (event.getCode() == KeyCode.UP) {
street_1_D.requestFocus();
event.consume();
}
}
});
city_D.setOnKeyPressed(new EventHandler<KeyEvent>() {
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.ENTER || event.getCode() == KeyCode.TAB || event.getCode() == KeyCode.DOWN) {
//okButtonType.requestFocus();
event.consume();
}
if (event.getCode() == KeyCode.UP) {
street_2_D.requestFocus();
event.consume();
}
}
});
// END Dialog All Listner
List<String> databaseFiles = new ArrayList<String>();
dialog.setResultConverter(dialogButton -> {
if (dialogButton == okButtonType) {
street_1 = street_1_D.getText();
databaseFiles.add(street_1);
street_2 = street_2_D.getText();
databaseFiles.add(street_2);
city = city_D.getText();
databaseFiles.add(city);
return databaseFiles;
}
return null;
});
Optional<List<String>> result = dialog.showAndWait();
if (result.isPresent()) {
System.out.println("Street 1: " + street_1 + " \n Street 2: " + street_2 + "\n City: " + city);
} else {
System.out.println("Cancle");
}
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}