JavaFX TextArea:如何设置制表宽度

时间:2012-12-08 01:21:08

标签: 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();
        }
    }
});

3 个答案:

答案 0 :(得分: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();
        }
    }
});

答案 1 :(得分:1)

@tenotron

你的代码也执行相同的逻辑,用于组合TAB键和一组修饰符(shift,control,alt,meta或shortcut)。含义 在TextArea中

按TAB键= Ctrl(修饰符)+ TAB = .... =您的逻辑。

要解决此问题,您必须使用KeyCombination

示例代码:

textArea.addEventFilter(KeyEvent.KEY_PRESSED,
                new EventHandler<KeyEvent>() {
                    final KeyCombination combo = new KeyCodeCombination(
                            KeyCode.TAB);
            @Override
                    public void handle(KeyEvent event) {
                          // check for only tab key
                        if (combo.match(event)) {
                            textArea.insertText(textArea.getCaretPosition(),
                                    "I am not real TAB");
                            event.consume();
                }
            }
        });

现在按TAB键结果“我不是真正的TAB”,ctrl + TAB将突出显示场景中的下一个节点。

参考:

Correctly Checking KeyEvents

KeyCombination

答案 2 :(得分:0)

尝试将所需内容显示为字符串。然后使用R 如果要四个空格这对我有用。