【问题标题】:Print dialog does not come to the fore打印对话框没有出现
【发布时间】:2016-04-25 09:42:54
【问题描述】:

通过JavaFx 的PrinterJob 可以调用Print Dialog。我的问题是调用时的对话框没有出现。

这是我的例子:

import javafx.application.Application;
import javafx.print.Printer;
import javafx.print.PrinterJob;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class Printexample extends Application
{

  @Override
  public void start( final Stage primaryStage )
  {

    final PrinterJob job = PrinterJob.createPrinterJob( Printer.getDefaultPrinter() );
    final Button b = new Button( "Print Dialog" );
    b.setOnAction( event -> job.showPrintDialog( primaryStage ) );
    final BorderPane pane = new BorderPane( b );
    primaryStage.setMinWidth( 400 );
    primaryStage.setMinHeight( 300 );
    primaryStage.setTitle( "Print" );
    final Scene scene = new Scene( pane );
    primaryStage.setScene( scene );


    primaryStage.centerOnScreen();
    primaryStage.addEventFilter( KeyEvent.KEY_PRESSED, event ->
    {
      if ( event.getCode().equals( KeyCode.ESCAPE ) )
      {
        primaryStage.close();
      }
    } );
    primaryStage.show();

  }

  public static void main( final String[] args )
  {
    launch( args );
  }
}

第二个问题:框架不是模态的,因此会导致错误。

信息:我使用 Java 8_92。

【问题讨论】:

    标签: java javafx printing dialog modal-dialog


    【解决方案1】:

    JDK-8088395 描述的可能是 JavaFX 的当前限制。

    所以你有以下选择:

    1. 等待此问题最终在更新或 JavaFX 9 中得到修复。
    2. 按照JDK-8098009 中的建议,为自己编写一个自定义对话框,然后与打印 API 通信以填充它。
    3. 使用叠加层阻止您的场景,显示打印对话框,然后移除叠加层。您还需要防止在场景被遮挡时关闭窗口。
    4. 使用 AWT 打印对话框(kludge,您已被警告),例如:

     

    java.awt.print.PrinterJob printJob = PrinterJob.getPrinterJob();
    Button b = new Button("Print Dialog");
    b.setOnAction(event -> {
        JFrame f = new JFrame();
        printJob.printDialog();
        // Stage will be blocked(non responsive) until the printDialog returns
    });
    

    【讨论】:

      【解决方案2】:

      这些问题今天发生在我身上,使用的是 Spring Boot 应用程序和 Windows 10 下的相同代码。

      我在这里写了解决方案,对我来说可行,因为这是同一个问题。

      Spring 默认将 java.awt.headless 属性设置为 true。

      在showPrintDialog方法的实现中,有一个关于headless返回true但不显示对话框的错误检查。

      我的解决方案是将 Spring 中的 headless 属性设置为 false,如 Efe Kahraman 的 Run Spring Boot Headless 所述

      【讨论】:

        【解决方案3】:

        我认为您可能遗漏了一些将舞台放在前面的代码。

        尝试添加:stage.toFront();

        来源:http://www.java2s.com/Code/Java/JavaFX/Movingstagewindowtofront.htm

        【讨论】:

        • 我无法打开打印对话框。
        猜你喜欢
        • 1970-01-01
        • 2015-06-30
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 2011-03-16
        • 2012-04-30
        • 2018-12-12
        • 1970-01-01
        相关资源
        最近更新 更多