私はListViewオブジェクトを持っています。私は私のサーバーのためのコンソールウィンドウの一種としてこれを使用しています。そのようなボックスにカラー化されたテキストを表示することが私が考えることができる唯一の方法でした。これはこれまで素晴らしいことです。今私ができることができるようにしたいのは、1つのインデックスまたは行に異なる色のテキストを付けることです。Javafx Textマルチワードカラー化
例: "こんにちはは" 緑のだろうと、 "世界は" 青いだろう
listView[0] = "Hello " + "world";
。これがjavafxのテキストまたは他の方法で私はそれについて行く方法を知りたいと思います使用することができれば。私はJavafx Textを主な犯人として使用しています。
私は誰もが私がここでやろうとしているものを理解し、そうでない場合は、私が知っていると私はそれを少し言い替えるしようとするでしょうことを願って。私は解決策を見つけ出すことができましたjewelseaへ
SOLUTION
感謝。私はセルファクトリーを使用するのではなく、少し違ったアプローチをしました。
のListView
ListView<FlowPane> consoleWindow = new ListView<>();
ArrayList<FlowPane> consoleBuffer = FXCollections.observableArrayList();
consoleWindow.setItems(consoleBuffer);
inputBox.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent keyEvent) {
if (keyEvent.getCode() == KeyCode.ENTER) {
consoleBuffer.add(parseInput.parseInputToArray(inputBox.getText()));
}
consoleWindow.scrollTo(consoleBuffer.size());
}
});
ConsoleInputParse:
public class ConsoleInputParse {
private String[] wordList = {};
public ConsoleInputParse() {}
public FlowPane parseInputToArray(String input) {
wordList = input.trim().split("[ ]+");
return colorize();
}
public FlowPane colorize() {
ArrayList<Text> textChunks = new ArrayList<>();
FlowPane bundle = new FlowPane();
//Todo: use regex to check for valid words
for (String word : wordList) {
String spaced = word + " ";
switch (word) {
case "Hello": case "hello":
textChunks.add(customize(spaced, "purple"));
break;
case "World": case "world":
textChunks.add(customize(spaced, "blue"));
break;
case "Stack Overflow":
textChunks.add(customize(spaced, "orange", "Arial Bold", 15));
default:
textChunks.add(customize(spaced, "black", "Arial", 13));
break;
}
}
bundle.getChildren().addAll(textChunks);
return bundle;
}
public Text customize(String word, String color) {
return TextBuilder.create().text(word).fill(Paint.valueOf(color)).build();
}
public Text customize(String word, String color, String font) {
return TextBuilder.create()
.text(word)
.fill(Paint.valueOf(color))
.font(Font.font(font, 12)).build();
}
public Text customize(String word, String color, String font, int fontSize) {
return TextBuilder.create()
.text(word)
.fill(Paint.valueOf(color))
.font(Font.font(font, fontSize)).build();
}
}
"実施例"
はあなたがcellfactoryがうまくいくかについて共有できるすべてのリソースを持っていますか、またはどのように顧客にのようなものを構築します。 javafxのその部分は、常に私を混乱させる。 'ListView'とJavaを使用して – DerekE
トムSchindl [実装何か](http://tomsondev.bestsolution.at/2013/02/20/from-styledtextviewer-to-a-styledtexteditor-with-javafx8/)8'のTextFlow 'しかし、それはおそらくあなたが望むもののために過度の方法です。基本的な例をまとめることができるかどうかがわかります。 – jewelsea
ListView + FlowPane +複数のテキストノードの組み合わせに基づいて、[サンプルソリューション](https://gist.github.com/jewelsea/5036908)へのリンクを追加しました。 – jewelsea