JavaFX - вкладка не будет отображать ни содержимое файла при открытии файла - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь создать текстовый редактор, используя JavaFX.Я хочу иметь возможность открыть файл из окна в главное окно в виде вкладки.До сих пор я создал необходимые пункты меню и окно параметров, которое содержит функцию, открывающую проводник для выбора файла.

Когда пользователь нажимает кнопку «Выбрать файл», открывается проводник.Когда пользователь выбирает файл, окно «Открыть файл» закрывается.Главное окно (3-е изображение) затем остается, но не содержит вкладку с содержимым файла.

После выполнения функции "openFile ()" ошибки не возвращаются, но вкладка не открывается.Я полагаю, что это может быть проблема с попыткой открыть вкладку в функции «ChooseFileButton.SetOnAction ()», но не может подтвердить.

Любые предложения / объяснения будет принята с благодарностью.


Открыть файл

enter image description here

Открыть файл (FileChooser)

enter image description here

Выход:

enter image description here


public class Main extends Application {

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

@Override
public void start(Stage primary) throws Exception {
    primary.setTitle("Chris' Text Editor");

    MenuBar menuBar = new MenuBar();
    VBox vbox = new VBox(menuBar);

    /* FILE MENU */
    MenuItem openFile = new MenuItem("Open...");

    fileMenu.getItems().add(openFile);

    Pane rootPane = new Pane();

    TextArea editorTextArea = new TextArea();
    editorTextArea.setMinHeight(1000);
    editorTextArea.setMinWidth(1000);
    editorTextArea.setVisible(false);
    rootPane.getChildren().add(editorTextArea);

    TabPane tabPane = new TabPane();
    tabPane.setSide(Side.TOP);

    openFile.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {

            Label fileLabel = new Label();
            fileLabel.setText("No File selected...");

            GridPane grid = new GridPane();
            Scene contextScene = new Scene(grid, 450, 300);

            /* NEW WINDOW */
            Stage openFileWindow = new Stage();
            openFileWindow.setTitle("Open File");
            openFileWindow.setScene(contextScene);

            /* SET WINDOW MODAL */
            openFileWindow.initModality(Modality.WINDOW_MODAL);

            /* SET PARENT WINDOW */
            openFileWindow.initOwner(primary);

            /* CHOOSE FILE DIRECTORY BUTTON */
            openFileWindow.setX(primary.getX() + (primary.getX() / 2));
            openFileWindow.setY(primary.getX() + (primary.getX() / 2));

            openFileWindow.show();

            /* CHOOSE FILE BUTTON */
            Button chooseFileButton = new Button();
            chooseFileButton.setText("Choose File");

            chooseFileButton.setOnAction(new EventHandler<ActionEvent>() {
                public void handle(ActionEvent event) {
                    FileChooser chooseFile = new FileChooser();
                    File selectedFile = chooseFile.showOpenDialog(openFileWindow);

                    if(selectedFile != null) {
                        String filePath = selectedFile.getPath();
                        fileLabel.setText(filePath);
                        String fileContent = openFile2(filePath);

                        /* CREATE NEW TAB */
                        Tab newTab = new Tab();
                        newTab.setContent(editorTextArea);
                        newTab.setText(filePath);
                        tabPane.getTabs().add(newTab);

                        editorTextArea.setVisible(true);

                        /* POPULATE TEXT AREA WITH FILE CONTENTS */
                        editorTextArea.appendText(fileContent);

                        /* FOCUS ON TAB */
                        SingleSelectionModel<Tab> selection = tabPane.getSelectionModel();
                        selection.select(newTab);

                        openFileWindow.close();
                    }
                }
            });

            grid.setAlignment(Pos.CENTER);
            grid.setHgap(10);
            grid.setVgap(10);

            grid.add(chooseFileButton, 0, 0);
            grid.add(fileLabel, 0, 1);

        }


    });

    menuBar.getMenus().add(fileMenu);   

    Scene scene = new Scene(vbox, 1000, 750);
    primary.setScene(scene);
    primary.show();
}

 public String openFile2(String filePath) {
    StringBuilder content = new StringBuilder();

    try (Stream<String> stream = Files.lines(Paths.get(filePath), StandardCharsets.UTF_8)){
        stream.forEach(s -> content.append(s).append("\n"));
    } catch (IOException e) {
        e.printStackTrace();
    }

    return content.toString();

 }

1 Ответ

0 голосов
/ 03 июня 2018

Вы никогда не добавляли TabPane в сцену:

vbox.getChildren().add(tabPane);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...