2016-04-25 36 views
5

Przez PrinterJob z JavaFx można wywołać okno dialogowe drukowania. Mój problem polega na tym, że dialog podczas rozmowy nie wysuwa się na pierwszy plan.Okno dialogowe drukowania nie przychodzi na pierwszy plan

Oto mój przykład:

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

Drugi problem: rama nie jest modalne, dlatego może prowadzić do błędów.

Informacja: Używam Java 8_92.

Odpowiedz

4

Prawdopodobnie ograniczenie prądu JavaFX jak opisał JDK-8088395.

Więc masz te opcje:

  1. Wait to, aby w końcu zostać ustalona w aktualizacji lub JavaFX 9.
  2. Napisz sobie okna niestandardowe, a następnie komunikacji z API drukowania, aby go zapełnić, jak sugeruje w JDK-8098009.
  3. Zablokuj scenę za pomocą nakładki, wyświetl okno dialogowe drukowania, a następnie usuń nakładkę. Musisz także zapobiec zamknięciu okna, gdy scena jest zablokowana.
  4. Zastosowanie AWT Drukuj Dialog (kludge, zostałeś ostrzeżony), np .:

 

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 
}); 
Powiązane problemy