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:如何设置制表宽度的主要内容,如果未能解决你的问题,请参考以下文章