Следующий код динамически создает TextFlow и Text, которые изначально содержат новые символы строки (возможно, изображения и другие области).
InputStream stream = new ByteArrayInputStream(text.toString().getBytes(StandardCharsets.UTF_8));
TextFlow element = new FXMLLoader().load(stream);
Однако метод ByteArrayInputStream с FXML удаляет все новые строки.
Пробовал использовать символы конца строки Windows и Unix, но это не должно иметь значения, но вы доходите до этого момента, когда напрасно пробуете разные комбинации.
Обычно рекомендуется использовать BufferedReader для вернуть новые линии, но здесь я не в контроле. Другие методы загрузки, похоже, принимают URL-адреса и ссылки на ресурсы, однако это управляемая строка.
Пример
Java-код:
package simpleexample;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;
import com.jcabi.xml.XMLDocument;
public class TestFxmlWithBreaks extends Application {
@Override
public void start(Stage primaryStage) {
Scene scene = new Scene(createEntry(), 750, 750, Color.web("#666970"));
primaryStage.setScene(scene);
primaryStage.show();
}
private VBox createEntry() {
VBox entryBox = new VBox();
entryBox.setFillWidth(true);
entryBox.setSpacing(20);
entryBox.setMaxWidth(750);
try {
XMLDocument test = new XMLDocument(this.getClass().getResourceAsStream("inputFxml.xml"));
System.out.println(test.toString());
InputStream stream = new ByteArrayInputStream(test.toString().getBytes(StandardCharsets.UTF_8));
TextFlow element = new FXMLLoader().load(stream);
element.setMaxWidth(750);
entryBox.getChildren().add(element);
} catch (Exception e) {
//log something
}
return entryBox;
}
public static void main(String[] args) {
launch(args);
}
}
inputFxml.xml:
<?xml version="1.0" encoding="UTF-8"?><?import javafx.scene.text.*?><TextFlow xmlns:fx="http://javafx.com/fxml" styleClass="paragraph">
<Text style="-fx-font-size: 20;">A list of stuff</Text>
<Text>
* stuff
* more stuff
* even more stuff, all with new lines
</Text>
<Text style="-fx-font-size: 15;">This should demonstrate it</Text>
</TextFlow>
text.toString()
, который здесь не работает? т.е. как-нибудь сделать минимально воспроизводимый пример? Трудно понять, что вы пытаетесь сделать... почему бы просто не создатьTextFlow
с помощью Java вместо FXML и не сгенерировать текстовое содержимое? - person James_D   schedule 06.12.2015TextFlow textFlow = FXMLLoader.load(getClass().getResource("inputFxml.fxml"));
), вы получите тот же результат. Я посмотрю, смогу ли я найти обходной путь позже. - person James_D   schedule 07.12.2015