You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:14:59