如何设置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();
}
}
});
答案 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将突出显示场景中的下一个节点。
参考:
答案 2 :(得分:0)
尝试将所需内容显示为字符串。然后使用R
如果要四个空格这对我有用。