我很難消費(fèi)一個(gè)onKeyPressed事件。TextField我的應(yīng)用程序中有一個(gè)允許用戶按 [ENTER] 鍵來(lái)實(shí)現(xiàn)某個(gè)功能;但是,我也為場(chǎng)景指定了一個(gè)默認(rèn)按鈕。雖然我可以成功觸發(fā)在 中按下的鍵所需的操作,但TextField始終首先執(zhí)行默認(rèn)按鈕的操作。當(dāng)用戶在TextField.請(qǐng)參閱以下 MCVE:import javafx.application.Application;import javafx.geometry.Insets;import javafx.geometry.Pos;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.control.ButtonBar;import javafx.scene.control.TextField;import javafx.scene.input.KeyCode;import javafx.scene.layout.VBox;import javafx.stage.Stage;public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { // Simple UI VBox root = new VBox(10); root.setPadding(new Insets(10)); root.setAlignment(Pos.CENTER); // TextField TextField textField = new TextField(); // Capture the [ENTER] key textField.setOnKeyPressed(event -> { if (event.getCode() == KeyCode.ENTER) { System.out.println("-> Enter"); event.consume(); } }); // Buttons Button btnCancel = new Button("Cancel"); btnCancel.setCancelButton(true); btnCancel.setOnAction(e -> { System.out.println("-> Cancel"); primaryStage.close(); }); Button btnSave = new Button("Save"); btnSave.setDefaultButton(true); btnSave.setOnAction(e -> { System.out.println("-> Save"); primaryStage.close(); }); ButtonBar buttonBar = new ButtonBar(); buttonBar.getButtons().addAll(btnCancel, btnSave); root.getChildren().addAll(textField, buttonBar); primaryStage.setScene(new Scene(root)); primaryStage.setTitle("Consume Event"); primaryStage.show(); }}所需的行為是能夠textField輸入并按回車(chē)鍵。輸出應(yīng)僅顯示-> Enter,舞臺(tái)應(yīng)保留。但是,當(dāng)前發(fā)生的是該階段以以下輸出結(jié)束:-> Save-> Enter我event.consume()在錯(cuò)誤的地方打電話嗎?我想保持默認(rèn)按鈕不變。
2 回答

largeQ
TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
正如文檔所述:
Windows / Linux:默認(rèn)按鈕在獲得焦點(diǎn)時(shí)接收 ENTER 鍵。當(dāng)默認(rèn)按鈕沒(méi)有焦點(diǎn),并且焦點(diǎn)在另一個(gè) Button 控件上時(shí),按下 ENTER 鍵將被另一個(gè)非默認(rèn) Button 接收。當(dāng)焦點(diǎn)位于用戶界面的其他地方,而不是任何按鈕上時(shí),如果指定了一個(gè)按鈕,并且場(chǎng)景中沒(méi)有其他節(jié)點(diǎn)首先使用它,則默認(rèn)按鈕將接收按 ENTER 鍵。
所以我相信這是一個(gè)錯(cuò)誤。正如我在評(píng)論中所說(shuō),一種解決方法是檢查 TextField 是否在您的默認(rèn)按鈕的 setOnAction 內(nèi)具有焦點(diǎn)并在那里使用該事件,直到他們修復(fù)它。
添加回答
舉報(bào)
0/150
提交
取消