首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >打开文件时,JavaFX - Tab既不显示也不显示文件内容

打开文件时,JavaFX - Tab既不显示也不显示文件内容
EN

Stack Overflow用户
提问于 2018-06-04 04:27:07
回答 1查看 35关注 0票数 1

我正在尝试使用JavaFX创建一个文本编辑器。我希望能够将文件从窗口作为选项卡打开到主窗口中。到目前为止,我已经创建了必要的菜单项和一个选项窗口,其中包含打开文件资源管理器以选择文件的功能。

当用户按下“选择文件”按钮时,文件资源管理器被打开。当用户选择一个文件时,“打开文件”窗口关闭。然后,主窗口(第三个图像)位于左侧,但不包含包含文件内容的选项卡。

在执行"openFile()“函数时,不会返回任何错误,但不会打开任何选项卡。我认为这可能是因为试图在"chooseFileButton.SetOnAction()“函数中打开选项卡,但无法确认。

任何建议/解释都将不胜感激。

打开文件

打开文件(FileChooser)

输出:

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();

 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 04:41:27

您从未将TabPane添加到场景中:

vbox.getChildren().add(tabPane);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50670670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档