如何在RichTextFX中实现括号与引号自动配对功能?
解决RichTextFX CodeArea自动补全括号和引号的问题
你的代码无效的核心原因是在KEY_TYPED事件中误用了getCode()方法——对于KEY_TYPED事件,KeyEvent.getCode()始终返回UNDEFINED,应该通过getCharacter()获取用户输入的具体字符。另外,补全后调整光标位置能让交互更自然。
修正后的代码如下:
public class MREX extends Application { @Override public void start(final Stage primaryStage) throws Exception { Scene scene = new Scene(createTextAreaBox(), 600, 400); primaryStage.setScene(scene); primaryStage.show(); // 原代码遗漏窗口显示逻辑 } private Node createTextAreaBox() { CodeArea mainCodeArea = new CodeArea(); mainCodeArea.addEventHandler(KeyEvent.KEY_TYPED, ke -> { String inputChar = ke.getCharacter(); int caretPos = mainCodeArea.getCaretPosition(); switch (inputChar) { case "(": mainCodeArea.insertText(caretPos, ")"); mainCodeArea.moveTo(caretPos + 1); // 光标定位到括号中间 break; case "\"": mainCodeArea.insertText(caretPos, "\""); mainCodeArea.moveTo(caretPos + 1); break; case "'": mainCodeArea.insertText(caretPos, "'"); mainCodeArea.moveTo(caretPos + 1); break; } }); return mainCodeArea; } }
关键修正说明:
- 改用
ke.getCharacter()获取输入字符,适配KEY_TYPED事件的特性 - 补全字符后调用
moveTo()将光标定位到输入字符和补全字符之间,优化输入体验 - 补充
primaryStage.show(),确保窗口正常显示 - 增加单引号的补全逻辑,可根据需求调整或删减
内容的提问来源于stack exchange,提问作者ravengal
相关产品推荐
相关产品推荐

