Java “打印”对话框并不突出
JavaFx的PrinterJob可以调用打印对话框。我的问题是,调用时的对话框没有出现 以下是我的例子:Java “打印”对话框并不突出,java,javafx,printing,dialog,modal-dialog,Java,Javafx,Printing,Dialog,Modal Dialog,JavaFx的PrinterJob可以调用打印对话框。我的问题是,调用时的对话框没有出现 以下是我的例子: 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.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。我认为您可能缺少一段代码,无法将舞台推向前台 尝试添加:
stage.toFront()代码>
来源:可能是JavaFX的当前限制,如所述
因此,您有以下选择:
等待更新或JavaFX9最终修复此问题
按照中的建议,编写一个自定义对话框,然后与打印API通信以填充它
使用覆盖阻止场景,显示“打印”对话框,然后删除覆盖。在场景被阻止时,还需要防止窗口关闭
使用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
});