Можно ли получить символ сдвига в JavaFX? - PullRequest
0 голосов
/ 20 октября 2019

Можно ли получить символ сдвига в Java или JavaFX?

Например, если у меня есть символ '1' и я хочу использовать символ сдвига в макете qwertz. Я получаю '!'.

, потому что у меня есть JavaFX KeyEvent, и я хочу символ, который нажимается. Но KeyEvent не заставил меня сменить персонажа на 1. Только для писем.

Возможно ли это без JNI или есть обходной путь, например, с TextField и событиями?

Или я должен использовать собственный Map?

1 Ответ

0 голосов
/ 20 октября 2019

Вы должны прослушать KEY_TYPED события и запрос KeyEvent#getCharacter(). Если пользователь наберет Shift + 1 , то #getCharacter() вернет "!", по крайней мере, на обычной клавиатуре QWERTY в США.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;

public class App extends Application {

  @Override
  public void start(Stage primaryStage) {
    Text text = new Text();
    primaryStage.addEventHandler(KeyEvent.KEY_TYPED, event -> {
      event.consume();
      text.setText(text.getText() + event.getCharacter());
    });
    primaryStage.setScene(new Scene(new StackPane(text), 500, 300));
    primaryStage.show();
  }
}

Примечание: Вышесказанное не является исчерпывающей реализацией. Например, ввод Backspace не удалит символ, а вместо этого добавит «неизвестный символ», поскольку символ \b не имеет представления.

...