我想知道我的方法是否正确。我正在尝试显示正在生成的收据(您也可以将其视为动态文本)。我只能想到使用'标签'来显示。有没有更好的办法?另外,当添加的文本超出标签大小时,它应该变为“可滚动”。我尝试使用'ScrollPane',但我的文字没有scollbar“激活”。我只能找到'正在制作的图像'可滚动“而不是'Label'或'TextArea'。欢迎任何帮助或建议。
PS:我刚开始通过试用这个应用程序来学习JavaFX 8,但是如果不处理这个问题,我就无法继续学习。
答案 0 :(得分:1)
我建议你为收据制作一个带有漂亮样式的html模板,并使用带有唯一ID的跨度。
然后使用jsoup将标签文字放在该范围内,并在网页浏览中显示该HTML。
另一个好处是,您可以使用javafx8 webview printing
打印该收据import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class HtmlReceipt extends Application{
String htmlTemplate = "<html>"
+ "<head>"
+ "<style>"
+ "body {background-color: yellow;}"
+ "#label1 {"
+ "background-color:red;"
+ "border:1px solid #000"
+ "}"
+ "</style>"
+ "</head>"
+ "<body>"
+ "<span id = 'label1'></span>"
+ "</body></html>";
@Override
public void start(Stage primaryStage) throws Exception {
AnchorPane rootpane = new AnchorPane();
Scene scene = new Scene(rootpane);
WebView webView = new WebView();
webView.setPrefHeight(400);
webView.setPrefWidth(300);
webView.getEngine().loadContent(getReceipt("MyName"));
rootpane.getChildren().add(webView);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
public String getReceipt(String labelText){
Document doc = Jsoup.parse(htmlTemplate);
Element span = doc.select("span#label1").first();
span.text(labelText);
return doc.html();
}
}