在JavaFX中生成收据?

时间:2015-04-07 02:12:57

标签: text javafx

我想知道我的方法是否正确。我正在尝试显示正在生成的收据(您也可以将其视为动态文本)。我只能想到使用'标签'来显示。有没有更好的办法?另外,当添加的文本超出标签大小时,它应该变为“可滚动”。我尝试使用'ScrollPane',但我的文字没有scollbar“激活”。我只能找到'正在制作的图像'可滚动“而不是'Label'或'TextArea'。欢迎任何帮助或建议。

PS:我刚开始通过试用这个应用程序来学习JavaFX 8,但是如果不处理这个问题,我就无法继续学习。

1 个答案:

答案 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();
}
}

enter image description here