【问题标题】:JavaFX TextArea: how to set tabulation widthJavaFX TextArea:如何设置制表宽度
【发布时间】:2012-11-26 05:52:51
【问题描述】:

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

当我在 TextArea 中使用制表(制表键)时,制表的宽度很宽。我想控制宽度,即使用 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();
        }
    }
});

【问题讨论】:

标签: java user-interface textarea javafx-2


【解决方案1】:

我终于找到了一种方法来做到这一点。

似乎 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();
        }
    }
});

【讨论】:

    【解决方案2】:

    @tenotron

    您的代码也为 TAB 键与一组修饰符(shift、control、alt、meta 或快捷方式)的组合执行相同的逻辑。意义 在文本区域中

    按 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

    【讨论】:

    • 好的,谢谢。我现在不需要这种行为,但很高兴知道。
    【解决方案3】:

    尝试将您想要的内容显示为字符串。然后使用s.replace("\t", " "); 如果你想要四个空格。这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      相关资源
      最近更新 更多