JavaFX printerPage(布局,节点)不打印文本流

JavaFX printerPage(布局,节点)不打印文本流,javafx,printing,textflow,Javafx,Printing,Textflow,我正在尝试打印格式化文本。 这是我的密码: public class ProvaTextFlow { public static void main(String[] args) { ProvaTextFlow p = new ProvaTextFlow() ; Node tf = p.creaTesto(); p.stampa(tf); } public Node creaTesto( ) {

我正在尝试打印格式化文本。 这是我的密码:

public class ProvaTextFlow {

    public static void main(String[] args)
    {
        ProvaTextFlow p = new ProvaTextFlow() ;
        Node tf = p.creaTesto();
        p.stampa(tf);
    } 

    public Node creaTesto( )
    {
      String s1 = "Dear Mom," + "\n"
              +   " I am going out dancing tonight with :" + "\n\n\n"  ;

      String f1 = " (girl) friend 1" + "\n" +
                  "        friend 2" + "\n" +
                  " (girl) friend 3" + "\n\n\n\n"  ;

        String closing = "don't wait for me" + "\n\n\n\n"
                + "bye" + "\n\n" ;


      Text t1 = new Text (s1); 
      Text t2 = new Text (f1); 
      Text t3 = new Text (closing) ;

      t1.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
      t2.setFont(Font.font("Tahoma", FontWeight.BOLD, FontPosture.ITALIC, 20));
      t3.setFont(Font.font("Tahoma", FontPosture.ITALIC, 20));

      TextFlow textFlow = new TextFlow() ; ;
        try {

            //Setting the width  
            textFlow.setPrefSize(2480, 3508); // 2480 X 3508 = A4(300)

            //Setting the line spacing  
            textFlow.setLineSpacing(5.0);

            //Retrieving the observable list of the TextFlow Pane 
            textFlow.getChildren().addAll(t1, t2, t3);

            // method to extract out of a TextFlow the String text.
            //             
            //////////////////////            
            //            StringBuilder sb = new StringBuilder();
            //            for (Node node : textFlow.getChildren()) 
            //            {
            //             if (node instanceof Text) 
            //             {
            //               sb.append(((Text) node).getText());
            //             }
            //            }
            //            String fullText = sb.toString();
            /////////////////////////            
            //            System.out.println("fulltext => " + fullText); 
        // this (when uncommented) correctly prints the unformatted text      } catch (Exception e) {
            System.out.println(e);
        }
        return textFlow;
    }

    public void stampa (Node n2p)
    {
        Printer printer = Printer.getDefaultPrinter(); 

        javafx.print.PageLayout pageLayout = printer.createPageLayout
                                            (
                                              Paper.A4, 
                                              PageOrientation.PORTRAIT, 
                                              Printer.MarginType.DEFAULT
                                            ); 

        PrinterJob job = PrinterJob.createPrinterJob();
        boolean result = job.printPage(pageLayout, n2p);
        System.out.println(" print result => " + result);// this gives true

        job.endJob();
    }
}
此代码编译并正确运行,
job.printPage()
返回
true
,打印机开始打印,但A4纸张是空白的。 基本上,我构建了一个
TextFlow
,其中三个字符串的格式各不相同,然后我将这个(
TextFlow
节点传递给
Stampa
方法。 如果我打印一个
表格视图
,一点问题都没有。 我错过什么了吗?
谢谢

看起来您缺少一些代码?这是一个
JavaFX
程序吗?如果是这样的话,你似乎缺少了这个项目的基本结构。这是一个更广泛的项目的一部分。GUI(FX应用程序)管理一些信息(关于我必须服用的药丸),然后有一种方法格式化文本以打印列表。同样的文本可以通过电子邮件发送。因此,是的,它是一个FX应用程序,但这只是其中的一部分。在这种情况下,您的程序有多少个
public static void main
?这只是一个副类,不是一个确定的类,用于试验FX打印功能。如果我将TextFlow放在VBox中,它会毫无问题地显示出来,我的应用程序中只有一个主方法,图形用户界面。我试图实现的打印逻辑将位于文件菜单的打印菜单项中,其本身位于选项卡式窗格中。此外,我在主应用程序中测试了这两种方法(Createsto和Stampa),它们的行为是相同的。所以,我提交了一个问题和一个任何人都可以玩的代码,希望得到正确的答案。谢谢,亲爱的塞德里克,你说得对。我从ProvaTextFlow类中删除了main()方法,并从FX应用程序中调用了它的方法。它现在正在工作。非常感谢你的建议。