Drucken-dialog nicht in den Vordergrund treten

Durch PrinterJob von JavaFx können, rufen Sie das Dialogfeld Drucken. Mein problem ist, dass das Dialogfeld beim Aufruf nicht zum Vorschein kommen.

Hier ist mein Beispiel:

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

Das zweite problem: Der Rahmen ist nicht modal, daher kann es zu Fehlern führen.

Informationen: ich benutze Java 8_92.

InformationsquelleAutor espirio | 2016-04-25



2 Replies
  1. 5

    Wohl eine Strombegrenzung von JavaFX, wie beschrieben, durch JDK-8088395.

    So haben Sie diese Optionen:

    1. Warten, das schließlich behoben werden in einer update-oder JavaFX-9.
    2. Schreiben Sie selbst eine benutzerdefinierte Dialogfeld und die Kommunikation mit der print-APIs, füllen Sie es, wie vorgeschlagen, in JDK-8098009.
    3. Blockieren, Ihre Szene mit einem overlay, zeigen Sie das Dialogfeld drucken und dann entfernen Sie die Auflage. Sie müssen auch verhindern, dass das Fenster schließen, während die Szene blockiert ist.
    4. Verwenden AWT Drucken-Dialog (Unordnung, Sie wurden gewarnt), z.B.:

     

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.