如何设置JavaFX TextField以将文本包装在字段中

时间:2019-03-28 01:54:33

标签: java javafx textfield wrapping textwrapping

我需要弄清楚如何在JavaFX TextField对象中包装文本。

因此,我的代码从用户那里获得了文件名,通过将文本文件的内容粘贴到文本字段中来打开文件。然后,用户可以编辑文本并将其保存到同一文件中。

我的代码可以完成上述所有操作,所以我不需要帮助。 JavaFX TextField对象似乎没有办法将文本包装在文本框中。最终看起来像这样: current textfield layout

备用图片链接:https://drive.google.com/open?id=1q2yU5ox6WA5EwS3YSxaKoqUDpCxpbPmu

出于明显的原因,我想换行。下面是我的代码(减去import语句)

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吗?我应该再使用其他东西吗?

谢谢!

编辑

解决方案

我将TextField文本更改为TextArea,删除了text.setAlignment(Pos.TOP_LEFT)行,并添加了text.setWrapText(true)(如下所述),现在程序运行良好。感谢Fabian和Zephyr!

0 个答案:

没有答案