2017-06-12 10 views
2

Ich schreibe ein Programm, das Notizen über die getätigten Lieferungen drucken soll. Momentan benutze ich die JavaFX 8-Druckmethoden, um einen einfachen Lieferschein zu erstellen. Der Standard-Stil für die Anzeige eines TableViews enthält jedoch viele Graustufen, die eine gedruckte Kopie merkwürdig und schwer lesbar erscheinen lassen.Einstellung von CSS zum Drucken von JavaFX

Ich habe CSS verwendet, um das TableView als solides Schwarz-Weiß zu gestalten, aber beim Drucken scheint es die CSS zu ignorieren, die ich eingestellt habe.

Hier ist, was ich habe zur Zeit:

private void printDeliveryNote(){ 
    PrinterJob job = PrinterJob.createPrinterJob(); 
    PageLayout pageLayout = Printer.getDefaultPrinter().createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.HARDWARE_MINIMUM); 
    Group pane = new Group(); 
    pane.getChildren().addAll(getNodeToPrint()); 
    pane.getStylesheets().add("css/main.css"); 

    if (job != null && job.showPrintDialog(new Stage())){ 
     boolean success = job.printPage(pageLayout, pane); 
     if (success){ 
      job.endJob(); 
     } 
    } 
} 

private Node getNodeToPrint() { 
    Group group = new Group(); 
    Label prntDeliveryId = new Label("Delivery Id: " + txtDeliveryId.getText()); 
    prntDeliveryId.setLayoutX(txtDeliveryId.getLayoutX()); 
    prntDeliveryId.setLayoutY(txtDeliveryId.getLayoutY()); 

    Label prntDate = new Label("Date: " + txtDate.getText()); 
    prntDate.setLayoutX(txtDate.getLayoutX() - 20); 
    prntDate.setLayoutY(txtDate.getLayoutY()); 

    Label prntTitle = new Label(lblTitle.getText()); 
    prntTitle.setLayoutX(lblTitle.getLayoutX()); 
    prntTitle.setLayoutY(lblTitle.getLayoutY()); 
    prntTitle.setFont(lblTitle.getFont()); 

    ImageView imgBarcode = new ImageView(SwingFXUtils.toFXImage(handleBarcode(txtDeliveryId.getText()), null)); 
    imgBarcode.setLayoutX(txtDeliveryId.getLayoutX()); 
    imgBarcode.setLayoutY(txtDeliveryId.getLayoutY()); 

    TableView<InstrumentContainer> prntInstrumentList = new TableView<InstrumentContainer>(); 
    setupInstrumentList(prntInstrumentList); 
    prntInstrumentList.setLayoutY(lstInstruments.getLayoutY() + 40); 
    prntInstrumentList.setPrefWidth(lstInstruments.getPrefWidth()); 
    System.out.println(prntInstrumentList.getHeight()); 
    prntInstrumentList.setLayoutX(lstInstruments.getLayoutX()); 
    group.getChildren().addAll(
      prntDeliveryId, 
      prntDate, 
      prntInstrumentList, 
      prntTitle, 
      imgBarcode 
    ); 
    return group; 
} 

Die CSS-Datei sieht wie folgt aus (die funktioniert, wenn auf einem Formular anzuzeigen, anstatt wenn sie gedruckt):

.table-row-cell{ 
-fx-table-cell-border-color: #424242; 
} 
.column-header{ 
-fx-border-color: #424242; 
-fx-background-color: #ffffff; 
} 

Der Tableview mit dem Stil angewendet es sieht aus wie auf dem Formular:

How it should look

Aber wenn es gedruckt wird, hat es immer noch den Standardstil: How it actually looks

Irgendwelche Ideen, wie man einen Knoten stylt, der gedruckt wird?

+1

Ich frage mich, ob es eine Sache der Vorrang ist. Fügen Sie den Deklarationen z. B. "! Wichtig" hinzu. '-fx-border-color: # 424242! wichtig;' – Michael

+0

Das hat wirklich perfekt funktioniert! Vielen Dank! Ich stecke seit Ewigkeiten darauf, keine Ahnung, warum ich nicht einmal daran gedacht habe. Könnten Sie das als Antwort hinzufügen, damit ich es als richtig markieren kann? Prost – Toymos

+0

Kein Problem. Ja, ich habe eine richtige Antwort mit ein bisschen mehr Info hinzugefügt. – Michael

Antwort

1

Dies ist wahrscheinlich ein Präzedenzfall. JavaFX enthält sein eigenes Standard-Stylesheet modena.css *, das höhere Spezifitätsregeln verwenden kann und dies oft tut, als alle benutzerdefinierten, die Sie hinzugefügt haben.

Eine Möglichkeit, dies zu umgehen wäre !important zu jedem der Erklärungen hinzuzufügen:

.table-row-cell { 
    -fx-table-cell-border-color: #424242 !important; 
} 
.column-header { 
    -fx-border-color: #424242 !important; 
    -fx-background-color: #ffffff !important; 
} 

Wenn Sie eine Menge von Eigenschaften dieses außer Kraft zu setzen haben vielleicht ein bisschen langweilig werden. Sie können sich die Standardstile im Standard-Stylesheet (oben verlinkt) ansehen und mit specificity calculator herausfinden, wie Sie Ihren Selektor spezifischer als den Standard-Stylesheet machen können.


* Ältere Versionen können verschiedene Standard-Stylesheets verwenden.