JavaFX TextArea:如何设置制表宽度

cek*_*ock 7 java user-interface textarea javafx-2

如何设置JavaFX TextArea的标签宽度?

当我在TextArea中使用制表(Tab键)时,制表的宽度很宽.我想控制宽度,即使用4个空格.在文档中,我找不到一种方法来执行此操作.

我尝试了这个代码(其中taInput是一个TextArea),但它不能正常工作:

taInput.setOnKeyPressed(new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent e) {
        if (e.getCode() == KeyCode.TAB) {
            // TAB SPACES
            StringBuilder sb = new StringBuilder(config.getTabSpacesCount());
            for (int i=0; i<config.getTabSpacesCount(); i++) {
                sb.append(' ');
            }
            taInput.insertText(taInput.getCaretPosition(), sb.toString());
            e.consume();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

cek*_*ock 5

最后我找到了一种方法来做到这一点.

似乎setOnKeyPressed()方法不适合此任务,因为事件是在执行keyPress操作后处理的.

addEventFilter()在执行操作之前处理事件,因此您可以操作事件.

我的新代码:

taInput.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
    @Override
    public void handle(KeyEvent e) {
        if (e.getCode() == KeyCode.TAB) {
            String s = StringUtils.repeat(' ', config.getTabSpacesCount());
            taInput.insertText(taInput.getCaretPosition(), s);
            e.consume();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)