JavaFX TextArea:如何设置制表宽度

Posted

技术标签:

【中文标题】JavaFX TextArea:如何设置制表宽度【英文标题】:JavaFX TextArea: how to set tabulation width 【发布时间】: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();
        
    
);

【问题讨论】:

我试图在不使用空格替换制表符的情况下解决类似问题...见***.com/questions/27585668/… 【参考方案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", " "); 如果你想要四个空格。这对我有用。

【讨论】:

以上是关于JavaFX TextArea:如何设置制表宽度的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX TextArea如何使用自动换行符设置文本

javafx如何设置文本框TextArea背景色为透明

JavaFX - 限制 TextArea 行?

如何知道用户在 JavaFX TextArea 中选择了哪个文本字符串

带滚动条的只读 TextArea [JavaFx]

“textarea”中的 JavaFX 8 计数行