Как настроить JavaFX TextField для переноса текста внутри поля - PullRequest
0 голосов
/ 28 марта 2019

Мне нужно помочь разобраться, как обернуть текст в объекте JavaFX TextField.

Таким образом, мой код получает имя файла от пользователя, открывает файл, вставляя содержимое текстового файла втекстовое поле.Затем пользователь может отредактировать текст и сохранить его в том же файле.

Мой код выполняет все вышеперечисленное, поэтому мне не нужна помощь.Кажется, что у объекта JavaFX TextField нет способа обернуть текст в текстовое поле.В конечном итоге это выглядит так: current textfield layout

Ссылка на альтернативное изображение: https://drive.google.com/open?id=1q2yU5ox6WA5EwS3YSxaKoqUDpCxpbPmu

Я хочу обернуть текст по понятным причинам.Ниже приведен мой код (за исключением операторов импорта)

public class TextEditor extends Application
{
    private Button button = new Button();
    private TextField text = new TextField();
    private Label label = new Label("Enter filename:");
    private String filename = "";
    String filetext = "";
    Scanner file = new Scanner("");
    PrintWriter pw = null;
    FileOutputStream fos = null;

    @Override
    public void start(Stage primaryStage) throws Exception
    {
        GridPane myPane = new GridPane();
        myPane.setHgap(10);
        myPane.setVgap(10);
        Scene myScene = new Scene(myPane, 500, 500);
        primaryStage.setScene(myScene);
        primaryStage.show();

        primaryStage.setTitle("Find File");

        myPane.setAlignment(Pos.BASELINE_CENTER);

        label.setAlignment(Pos.BASELINE_CENTER);
        myPane.add(label, 0, 0, 3, 1);

        text.setAlignment(Pos.TOP_LEFT);
        text.setPrefWidth(480);
        text.setPrefHeight(400);

        myPane.add(text, 0, 1);

        button = new Button("Submit Filename");
        button.setPrefSize(180, 50);
        button.setOnAction(new EventHandler<ActionEvent>() {
            public void handle(ActionEvent e) {
                if(button.getText().equals("Save Changes"))
                {
                    try
                    {
                        fos = new FileOutputStream(filename);
                        pw = new PrintWriter(fos);

                        System.out.println("Saving changes in " + filename);
                        pw.println(text.getText());
                        pw.close();
                        primaryStage.close();
                    }
                    catch (FileNotFoundException e1)
                    {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }
                if(button.getText().equals("Submit Filename"))
                {
                    filename = text.getText();  
                    try
                    {
                        file = new Scanner(new FileInputStream(new File(filename)));


                        while(file.hasNextLine())
                        {
                            String line = file.nextLine();
                            System.out.println(line);
                            filetext += line + "\n";
                        }

                        System.out.println("File text: " + filetext);
                        text.setText(filetext);
                        button.setText("Save Changes");
                    }
                    catch(FileNotFoundException exc)
                    {
                        System.out.println("Cannot find file. Program aborted.");
                        primaryStage.close();
                    }
                }

            }
        });

        myPane.add(button, 0, 2);

    }

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

Очень хотелось бы получить некоторую помощь при переносе текста.Нужно ли не использовать JavaFX TextField?Должен ли я использовать что-то еще?

Заранее спасибо!

РЕДАКТИРОВАТЬ

НАЙДЕНО РЕШЕНИЯ

Iизменил текст TextField на TextArea, удалил строку text.setAlignment (Pos.TOP_LEFT) и добавил text.setWrapText (true) (как предложено ниже), и теперь программа работает отлично.Спасибо Фабиану и Зефиру!

...