2016-04-25 56 views
5

JavaFx'in PrinterJob'u Yazdır iletişim kutusunu çağırabilir. Benim sorunum, arama sırasında diyaloğun ön plana çıkmamasıdır.Yazdırma iletişim kutusu ön tarafa gelmiyor

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

ikinci sorun: çerçeve nedenle hatalara yol açabilir, kalıcı değildir

İşte benim örnektir.

Bilgi: Java 8_92 kullanıyorum.

cevap

4

Muhtemelen JDK-8088395 tarafından açıklandığı gibi JavaFX bir akım sınırlama. önerildiği gibi

  1. , bu sonuçta bir güncellemede düzeltilmesi bekleyin veya JavaFX 9.
  2. Kendine özel bir iletişim kutusu yaz ve sonra doldurmak için baskı API'leri ile iletişim:

    Ee bu seçenekler vardır JDK-8098009.

  3. Bir bindirmeyi kullanarak sahneyi engelleyin, baskı iletişim kutusunu gösterin ve bindirmeyi kaldırın. Sahne engellendiğinde pencerenin kapanmasını da engellemeniz gerekecektir.
  4. Kullanım AWT Baskı Diyalog

 

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