Java 如何获取滚动窗格对象的内容

Java 如何获取滚动窗格对象的内容,java,Java,我正在用JavaFX制作一个文本编辑器 我的程序有一个选项卡窗格,其中包含选项卡,每个选项卡在滚动窗格中都有一个文本区域 我需要能够获取TextArea的文本内容,以便将其保存到.txt文件中,但是我遇到了问题 以下是用于检索当前所选选项卡的TextArea中包含的文本的代码位: tabPane.getSelectionModel().getSelectedItem().getContent().getContent().getText(); getSelectionModel().getSe

我正在用JavaFX制作一个文本编辑器

我的程序有一个选项卡窗格,其中包含选项卡,每个选项卡在滚动窗格中都有一个文本区域

我需要能够获取TextArea的文本内容,以便将其保存到.txt文件中,但是我遇到了问题

以下是用于检索当前所选选项卡的TextArea中包含的文本的代码位:

tabPane.getSelectionModel().getSelectedItem().getContent().getContent().getText();
getSelectionModel().getSelectedItem()获取当前选定的选项卡,然后.getContent()获取滚动窗格

next.getContent()应该返回滚动窗格中包含的TextArea。但是,NetBeans告诉我ScrollPane getContent()方法不存在

但是,Oracle的JavaFX文档()告诉我getContent()方法存在,应该返回ScrollPane包含的节点

有人知道我应该如何将节点包含在所选选项卡的滚动窗格中吗


谢谢

如果要访问节点上特定于类型的方法,则需要将getContent()调用的结果强制转换为相应的节点类型;例如:

((TextArea)
    ((ScrollPane)
        tabPane
            .getSelectionModel()
            .getSelectedItem()
            .getContent()
    ).getContent()
).getText();        
一些建议:

  • 您实际上不需要在滚动窗格中放置TextArea,因为TextArea将包装其文本,并根据需要获得内置滚动条
  • 如果您不需要滚动窗格,请不要使用滚动窗格,因为让滚动窗格正确布局(正确调整其大小及其内容)可能会很困难
  • 下面是一些备用代码

    import javafx.application.Application;
    import javafx.beans.binding.Bindings;
    import javafx.scene.Scene;
    import javafx.scene.control.*;
    import javafx.scene.layout.*;
    import javafx.stage.Stage;
    
    public class ScrollableTabs extends Application {
        @Override public void start(Stage stage) {
            final TabPane tabPane = new TabPane();
            tabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE);
            tabPane.getTabs().setAll(
                    makeTab("doe", "A deer, a female deer."),
                    makeTab("ray", "A flash a golden light."),
                    makeTab("me",  "A name a call myself.")
            );
    
            Label selectedLabel = new Label();
            selectedLabel.textProperty().bind(
                    Bindings.select(
                            tabPane,
                            "selectionModel",
                            "selectedItem",
                            "content",
                            "text"
                    )
            );
    
    // listener alternative to binding.
    //        tabPane
    //                .getSelectionModel()
    //                .selectedItemProperty()
    //                .addListener((observable, oldTab, newTab) -> {
    //            TextArea selectedArea = (TextArea) newTab.getContent();
    //
    //            selectedLabel.setText(
    //                selectedArea.getText()
    //            );
    //        });
    
            tabPane.getSelectionModel().select(1);
            VBox.setVgrow(tabPane, Priority.ALWAYS);
    
            stage.setScene(
                    new Scene(
                            new VBox(10,
                                    selectedLabel,
                                    tabPane
                            )
                    )
            );
    
            stage.show();
        }
    
        private Tab makeTab(String title, String text) {
            Tab tab = new Tab(title);
    
            tab.setContent(
                    new TextArea(text)
            );
    
            return tab;
        }
    
        public static void main(String[] args) { launch(args); }
    }  
    
    请注意,我的代码中没有滚动窗格,但文本区域仍然会适当地显示滚动条