我是Java的新手,我正在努力完成以下任务。 我正在编写一个应用程序,它将用户的输入(取决于一个人的选择)编码到Quake III Arena中的命令行解释器中编译的代码中,使玩家能够根据以下字符前缀对着色字母进行着色(例如“^ 0Black ^ 3Yellow) ^ 0黑色 ^ 1白色 ^ 2绿色 ^ 3黄色 ^ 4蓝色 ^ 5青色(浅蓝色) ^ 6 MAGENTA紫色 ^ 7白色 That is how app looks in current stage
代码工作正常但我想根据输入生成一个Color Text,它会通过单击generate来预览Nick的当前外观。
经过几次尝试后我放弃了,我不明白如何处理这个问题。任何事情都会受到高度赞赏。我希望我足够具体。谢谢你。
答案 0 :(得分:0)
您可以使用regular expression提取文本部分,然后构建包含不同颜色文本元素的文本流。
这是一个演示。正则表达式查找两个不同的命名组:可选^
后跟(名为“colIndex”)数字,然后(命名为“text”)任何非零序列的字符不等于^
。文本字段上的监听器只是迭代匹配并构建Text
元素。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;
public class TextFieldRegexExample extends Application {
@Override
public void start(Stage primaryStage) {
Color[] colors = new Color[] {Color.BLACK, Color.WHITE, Color.GREEN, Color.YELLOW, Color.BLUE, Color.CYAN, Color.PURPLE};
TextField textField = new TextField();
Pattern pattern = Pattern.compile("(\\^(?<colorIndex>\\d))?(?<text>[^(\\^\\d)]+)");
TextFlow textFlow = new TextFlow();
textField.textProperty().addListener((obs, oldValue, newValue) -> {
Matcher matcher = pattern.matcher(newValue);
textFlow.getChildren().clear();
while(matcher.find()) {
String color = matcher.group("colorIndex");
String text = matcher.group("text");
Text t = new Text(text+" ");
if (color != null && color.matches("\\d+")) {
int colIndex = Integer.parseInt(color);
if (colIndex >= 0 && colIndex < colors.length) {
t.setFill(colors[colIndex]);
}
}
textFlow.getChildren().add(t);
}
});
VBox root = new VBox(5, textField, textFlow);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}