2016-04-25 87 views
5

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.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。

回答

4

大概由JDK-8088395描述的JavaFX的電流限制。

所以,你有以下這些選項:

  1. 等待這個最終被固定在更新或JavaFX的9
  2. 寫自己的自定義對話框,然後與打印API的溝通來填充它,因爲建議在JDK-8098009
  3. 使用疊加層遮擋場景,顯示打印對話框,然後刪除疊加層。在場景被阻擋時,您還需要防止窗口關閉。
  4. 使用AWT打印對話框(組裝機,你已經被警告),例如:

 

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 
});