【发布时间】:2022-01-16 12:04:23
【问题描述】:
我正在尝试制作一个打字游戏,我为用户输入创建了一个文本字段,并尝试制作游戏,以便文本字段的最后一个字符如果与单词中的相应字符不匹配,则为红色被输入。以下是我目前拥有的相关节点类型。
Label wordsToType = new Label();
TextField userInput = new TextField();
StringBuilder wordsTyped = new StringBuilder();
TextField lastChar = new TextField();
userInput.setOnKeyReleased(e -> {
wordsTyped.append(userInput.getText()); // words typed is a string builder of what is in userInput
if (wordsTyped.toString().charAt(wordsTyped.length() - 1) - wordsToType.getText().charAt(wordsTyped.length() - 1) != 0) {
lastChar.setText(e.getText());
lastChar.setStyle("-fx-text-fill: red; -fx-font-size: 16px;");
wordsTyped.setLength(wordsTyped.length() - 1); // deletes last char from wordsTyped
userInput.setText(wordsTyped.toString() + lastChar.getText());
userInput.end();
}
wordsTyped.delete(0, wordsTyped.length());
});
【问题讨论】:
-
TextField和TextArea对于所有文本只能有一种样式,至少在它们的默认皮肤是如何实现的情况下。要拥有具有多种样式的文本,您可能需要使用TextFlow加上多个Text节点来研究。还有一个名为 RichTextFX 的库,它可以提供你想要的。 -
也就是说,一个文本域中选中的文本与域中其他文本的样式不同,两者的样式都可以通过css独立配置。也许您可以选择该字段中的最后一个字符。它可能对您有帮助,也可能没有。
-
@Slaw 我为
RichTextFX添加了示例代码
标签: java javafx colors textfield