当前位置: 首页 > 知识库问答 >
问题:

如何仅更改javafx文本字段中最后一个字符的颜色

束新
2023-03-14

我正在尝试制作一个打字游戏,我为用户输入创建了一个文本字段,并尝试制作游戏,以便文本字段的最后一个字符是红色的,如果它不匹配要键入的单词中的相应字符。以下是我目前所掌握的相关节点的类型。

java prettyprint-override">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());
});

共有1个答案

鲁鸿
2023-03-14

如评论中所述,您可以使用RichTextFX突出显示具有不同样式的输入文本。下面是一个示例代码:

Java:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.fxmisc.richtext.StyleClassedTextField;
import org.fxmisc.richtext.StyledTextField;
import org.fxmisc.richtext.model.StyleSpans;
import org.fxmisc.richtext.model.StyleSpansBuilder;

import java.util.Collection;
import java.util.Collections;

public class HighlightedTextFieldExample extends Application {

    @Override
    public void start(Stage stage) {
        StyledTextField<Collection<String>, Collection<String>> textField = new StyleClassedTextField();
        textField.lengthProperty().addListener((observableValue, oldValue, newValue) -> {
            if (newValue > 0) {
                StyleSpans<Collection<String>> styleSpans = new StyleSpansBuilder<Collection<String>>()
                        .add(Collections.emptyList(), newValue - 1) // no style (leading characters)
                        .add(Collections.singleton("last-character"), 1) // add a style class for the last character
                        .create();
                textField.setStyleSpans(0, styleSpans);
            }
        });
        textField.setPrefWidth(400);

        Scene scene = new Scene(textField);
        scene.getStylesheets().add(HighlightedTextFieldExample.class.getResource("highlighting.css").toExternalForm());
        stage.setScene(scene);
        stage.setTitle("Last Character Highlighting Example");
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }
}

CSS 样式文件(荧光笔.css):

.last-character {
    -fx-fill: red;
}

输出:

 类似资料:
  • 我在javaFX中有一个文本字段,在该字段中键入的任何内容都必须以蓝色显示,这可以通过css实现吗?如果是,那么如何?

  • 问题内容: 示例代码: 我想更改最后一个字母的颜色,在这种情况下为“ g”,但我需要使用CSS的解决方案,不需要JavaScript解决方案。 我逐个字母显示字符串,我不能使用静态解决方案。 问题答案: 不使用JavaScript,您唯一的选择是: 编辑您的小提琴链接 : 我不太确定为什么您说您不需要JavaScript解决方案,因为您已经有了很多解决方案。无论如何,在此示例中,您只需要进行一些小

  • 我对这两个都不熟悉 在我所有的表单中,textField的下划线都显示为蓝色。我想把它换成其他颜色。我使用的代码就像。。。 无法理解如何实现这一点。 注意:我知道这里有一个类似的问题,在flifter中更改TextField的下划线。但是,在那里也没有完全解决。另外,还有一个链接看起来与我的类似,它在这里使用appcompat v7更改EditText底线颜色,但实际上是属于Android开发的,

  • 问题内容: 我试图 建立一个解释器,所以我想知道如何 实时更改文本的颜色。例如,我在文本字段中输入的单词是: 几秒钟后,单词变成绿色。 可能吗? 问题答案: package test;

  • 我在java中模拟处理器计数器时遇到了一个问题。例如,我想从0到6进行计数,并在文本字段中显示计数的当前值(0、1、2、3、4、5、6)。当我点击“计数”按钮时,我的程序冻结了片刻,在文本字段中计数后,我只能看到数字6。我想在计数时看到其他数字。以下是我的部分代码: 我能用它做什么?谢谢你帮助我。

  • 我想在TextField中更改字体颜色。我找到了、来更改背景和边框的颜色,但没有找到文本的颜色。