JavaFX 8 print TextArea включает в себя огромное поле и дает серый фон - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь напечатать TextArea с помощью JavaFX8

Макет X TextArea равен 390, а макет Y равен 100

Результат печати включает 390 пикселей в левой части TextArea, а фон TextArea становится серым. Я попытался уменьшить расположение X до 0, и белая область на левой стороне исчезла. Но я должен сохранить текущий макет, потому что я собираюсь поместить что-то туда.

Это нормально, что результат печати включает эти 390 пикселей? Есть ли способ удалить эту белую область? Есть ли проблемы с моим кодом?

Я не установил цвет фона TextArea на любой цвет. Нужно ли устанавливать его белым, чтобы получить белый фон?

Спасибо!

Вот результат печати: enter image description here

Здесь это мой Main.class

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Print test");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

А это контроллер класса

package sample;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.print.PrinterJob;
import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;

public class Controller {

    @FXML
    private Label jobStatus;

    @FXML
    private TextArea textArea;

    @FXML
    private Button button;

    @FXML
    void initialize() {
        button.setOnAction(new EventHandler<ActionEvent>()
        {
            public void handle(ActionEvent event)
            {
                print(textArea);
            }
        });

    }


    private void print(Node node)
    {
        // Define the Job Status Message
        jobStatus.textProperty().unbind();
        jobStatus.setText("Creating a printer job...");

        // Create a printer job for the default printer
        PrinterJob job = PrinterJob.createPrinterJob();

        if (job != null)
        {
            // Show the printer job status
            jobStatus.textProperty().bind(job.jobStatusProperty().asString());

            // Print the node
            boolean printed = job.printPage(node);

            if (printed)
            {
                // End the printer job
                job.endJob();
            }
            else
            {
                // Write Error Message
                jobStatus.textProperty().unbind();
                jobStatus.setText("Printing failed.");
            }
        }
        else
        {
            // Write Error Message
            jobStatus.setText("Could not create a printer job.");
        }
    }
}

И образец.f xml

    <?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextArea?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="970.0" prefWidth="1290.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
      <TextArea fx:id="textArea" layoutX="390.0" layoutY="100.0" maxHeight="710.0" maxWidth="500.0" minHeight="710.0" minWidth="500.0" prefHeight="710.0" prefWidth="500.0" wrapText="true" />
      <Button fx:id="button" layoutX="159.0" layoutY="217.0" mnemonicParsing="false" text="Button" />
      <Label fx:id="jobStatus" layoutX="159.0" layoutY="142.0" text="Label" />
   </children>
</AnchorPane>
...