2 回答

TA貢獻1725條經(jīng)驗 獲得超8個贊
我可以重現(xiàn)這種行為。如果您在舞臺上添加一個,EventHandler
您可以清楚地看到問題。
stage.addEventFilter(KeyEvent.KEY_TYPED,?ev?->?{ ????System.out.println("Key?typed:?"?+?ev.getCharacter()); });
輸出:
Key?typed:?¨ Key?typed:?Ι Key?typed:?¨ Key?typed:?ι
我們對此無能為力,只能提交錯誤報告。
我不知道您是否可以在KeyEvents
發(fā)送這些鍵之前捕獲鍵入的鍵,但您可以在階段級別過濾它們。
stage.addEventFilter(KeyEvent.KEY_TYPED,?new?KeyTypedListener());
這不是很好,而是一種更“全球”的改變行為的方式。
public class KeyTypedListener implements EventHandler<KeyEvent> {
? ? private boolean disabled = false;
? ? private Map<String, String> charCombinations = new HashMap<>();
? ? private KeyEvent pendingEvent;
? ? public KeyTypedListener() {
? ? ? ? charCombinations.put("¨ι", "?");
? ? ? ? charCombinations.put("¨Ι", "?");
? ? }
? ? @Override
? ? public void handle(final KeyEvent event) {
? ? ? ? if (disabled || event.getCharacter() == null
? ? ? ? ? ? ? ? || event.getCharacter().length() != 1) {
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? final String typed = event.getCharacter();
? ? ? ? if (pendingEvent == null && isCombiCharacter(typed)) {
? ? ? ? ? ? pendingEvent = event.copyFor(event.getSource(), event.getTarget());
? ? ? ? ? ? event.consume();
? ? ? ? } else if (pendingEvent != null) {
? ? ? ? ? ? String combination =
? ? ? ? ? ? ? ? ? ? charCombinations.get(pendingEvent.getCharacter() + typed);
? ? ? ? ? ? if (combination == null) {
? ? ? ? ? ? ? ? disabled = true;
? ? ? ? ? ? ? ? fireEvent(pendingEvent);
? ? ? ? ? ? ? ? disabled = false;
? ? ? ? ? ? ? ? pendingEvent = null;
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? event.consume();
? ? ? ? ? ? ? ? pendingEvent = null;
? ? ? ? ? ? ? ? Platform.runLater(() -> {
? ? ? ? ? ? ? ? ? ? fireEventWithCharacter(event, combination);
? ? ? ? ? ? ? ? });
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? private boolean isCombiCharacter(final String character) {
? ? ? ? return "¨".equals(character);
? ? }
? ? private void fireEvent(final KeyEvent event) {
? ? ? ? Event.fireEvent(event.getTarget(), event);
? ? }
? ? private void fireEventWithCharacter(final KeyEvent event,
? ? ? ? ? ? final String character) {
? ? ? ? fireEvent(new KeyEvent(event.getSource(), event.getTarget(),
? ? ? ? ? ? ? ? event.getEventType(), character, "", KeyCode.UNDEFINED,
? ? ? ? ? ? ? ? event.isShiftDown(), event.isControlDown(), event.isAltDown(),
? ? ? ? ? ? ? ? event.isMetaDown()));
? ? }
}
當然你也可以創(chuàng)建一個新的EventDispatcher.

TA貢獻1895條經(jīng)驗 獲得超3個贊
我認為這是希臘鍵盤的問題。我嘗試使用其他文本字段(Opera 搜索欄、Google 搜索欄等),但無法寫出這個字符。您只能使用 Alt+0239 組合來編寫此內(nèi)容。您可以嘗試使用“field2.setOnKeyPressed()”創(chuàng)建組合。
添加回答
舉報