JavaFX PrinterJob komische Zeichen?
Hey, ich möchte in mein kleines Programm einführen das man Daten aus einer TableView drucken lassen kann. Jetzt habe ich allerdings das Problem dass wenn ich den Text drucken lasse mir nur komische Zeichen angezeigt werden "ĚزữẸ". Woran kann das liegen?
Code:
PrinterJob printerJob = PrinterJob.createPrinterJob(); if(printerJob.showPrintDialog(primaryStage) && printerJob.printPage(new Text("Text"))) printerJob.endJob();
1 Antwort
Code:
PrinterJob printerJob = PrinterJob.createPrinterJob(); if(printerJob.showPrintDialog(primaryStage) && printerJob.printPage(new Text("Text"))) printerJob.endJob();
Dein Code würde theoretisch ein neues Textelement drucken. - Nachdem dieses Textelement aber nirgends gezeichnet ist, siehst du nur abgehackte Zeichen.
PS: Es wäre gut wenn du ein vollständiges Beispiel deines Codes bereit stellen könntest.
Der 'ganze' Code ist es leider nicht: Um dein Beispiel nachvollziehen zu können, wäre ein ausführbares Beispiel relevant gewesen. Also eine vollständige (ausführbare) Klasse. - In der Frage waren davon nur drei Zeilen enthalten und jetzt im Kommentar immerhin die Methode.
Das Problem ist hier aber nach wie vor dasselbe: Die Elemente die du drucken willst, sind nirgends gezeichnet. Somit gibt es keinen Ankerpunkt, wo die Zeichnung beginnen soll:
Deine Methode: getPrintPage(); würde eine neue AnchorPane erstellen (aber auch diese nirgends Zeichen).
Wenn du eine Pane als Root-Pane definieren willst, dann zeichne diese einmal und verweise anschließend beim Drucken auf die Root Pane, z.B. so:
private AnchorPane root; public void start(Stage stage) throws Exception { root = getPrintPage(); stage.setScene(new Scene(root)); ... } ... private void print() { .... printerjob.printPage(root); ... }
Ein Ausführbares nachvollziehbares Beispiel könnte im übrigen z.B. so aussehen:
public class Test extends Application {
public static class Bean {
private StringProperty col1, col2;
public Bean(String col1, String col2) {
this.col1 = new SimpleStringProperty(col1);
this.col2 = new SimpleStringProperty(col2);
}
public String getCol1() {
return col1.get();
}
public StringProperty col1Property() {
return col1;
}
public String getCol2() {
return col2.get();
}
public StringProperty col2Property() {
return col1;
}
}
@Override
public void start(Stage primaryStage) throws Exception {
VBox vbox = new VBox();
TableViewtblView<Bean> = new TableView<>();
vbox.getChildren().add(tblView);
TableColumn<Bean,String> col1 = new TableColumn<>("col1");
TableColumn<Bean,String> col2 = new TableColumn<>("col2");
col1.setCellValueFactory(new PropertyValueFactory<Bean,String>("col1"));
col2.setCellValueFactory(new PropertyValueFactory<Bean,String>("col2"));
tblView.getColumns().add(col1);
tblView.getColumns().add(col2);
ObservableList<Bean> obs = FXCollections.observableArrayList();
obs.add(new Bean("Col1", "Col2"));
obs.add(new Bean("Test2", "Test3"));
tblView.setItems(obs);
Button btn = new Button("Print");
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
PrinterJob printerJob = PrinterJob.createPrinterJob();
if (printerJob.showPrintDialog(primaryStage) && printerJob.printPage(tblView)) {
printerJob.endJob();
}
}
});
vbox.getChildren().add(btn);
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Danke erstmal für deine Antwort!
Hier ist der ganze Code: