2016-04-25 31 views
5

Con PrinterJob di JavaFx è possibile chiamare la finestra di dialogo Stampa. Il mio problema è che il dialogo quando si chiama non viene in primo piano.La finestra di dialogo di stampa non viene visualizzata in anteprima

Ecco il mio esempio:

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

Il secondo problema: il telaio non è modale, quindi può portare ad errori.

Informazioni: utilizzo Java 8_92.

risposta

4

Probabilmente una limitazione di corrente di JavaFX, come descritto da JDK-8088395.

in modo da avere le seguenti opzioni:

  1. aspettare questo per eventualmente essere fissato in un aggiornamento o JavaFX 9.
  2. Scrivi te è una finestra di dialogo personalizzata e quindi comunicare con le API di stampa per popolarla, come suggerito in JDK-8098009.
  3. Blocca la scena utilizzando una sovrapposizione, mostra la finestra di dialogo di stampa e quindi rimuovi la sovrapposizione. Avrai anche bisogno di impedire che la finestra si chiuda mentre la scena è bloccata.
  4. Usa AWT finestra di dialogo Stampa (kludge, siete stati avvertiti), ad es .:

 

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